auto commit

This commit is contained in:
CyC2018 2018-06-12 15:39:13 +08:00
parent 508456e2c3
commit f9843de79a
9 changed files with 72 additions and 70 deletions

View File

@ -95,7 +95,7 @@
睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。 睡眠和挂起是用来描述行为,而阻塞和等待用来描述状态。
阻塞和等待的区别在于,阻塞是被动的,它是在等待获取一个排它锁而等待是主动的,通过调用 Thread.sleep() 和 Object.wait() 等方法进入。 阻塞和等待的区别在于,阻塞是被动的,它是在等待获取一个排它锁而等待是主动的,通过调用 Thread.sleep() 和 Object.wait() 等方法进入。
| 进入方法 | 退出方法 | | 进入方法 | 退出方法 |
| --- | --- | | --- | --- |
@ -165,7 +165,7 @@ public static void main(String[] args) throws ExecutionException, InterruptedExc
## 继承 Thread 类 ## 继承 Thread 类
同样也是需要实现 run() 方法,并且最后也是调用 start() 方法来启动线程 同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口
```java ```java
public class MyThread extends Thread { public class MyThread extends Thread {
@ -193,7 +193,7 @@ public static void main(String[] args) {
## Executor ## Executor
Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。 Executor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。
主要有三种 Executor 主要有三种 Executor
@ -392,7 +392,7 @@ public void func () {
它只作用于同一个对象,如果调用两个对象上的同步代码块,就不会进行同步。 它只作用于同一个对象,如果调用两个对象上的同步代码块,就不会进行同步。
对于以下代码,使用 ExecutorService 执行了两个线程(这两个线程使用 Lambda 创建),由于调用的是同一个对象的同步代码块,因此这两个线程会进行同步,当一个线程进入同步语句块时,另一个线程就必须等待。 对于以下代码,使用 ExecutorService 执行了两个线程,由于调用的是同一个对象的同步代码块,因此这两个线程会进行同步,当一个线程进入同步语句块时,另一个线程就必须等待。
```java ```java
public class SynchronizedExample { public class SynchronizedExample {
@ -445,7 +445,7 @@ public synchronized void func () {
} }
``` ```
它和同步代码块一样,作用于同一个对象。 它和同步代码块一样,作用于同一个对象。
**3. 同步一个类** **3. 同步一个类**
@ -457,7 +457,7 @@ public void func() {
} }
``` ```
作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也需要进行同步。 作用于整个类,也就是说两个线程调用同一个类的不同对象上的这种同步语句,也进行同步。
```java ```java
public class SynchronizedExample { public class SynchronizedExample {
@ -533,15 +533,17 @@ ReentrantLock 是 java.util.concurrentJ.U.C包中的锁相比于 synchr
**1. 等待可中断** **1. 等待可中断**
当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,可中断特性对处理执行时间非常长的同步块很有帮助 当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。
**2. 可实现公平锁** **2. 可实现公平锁**
公平锁是指多个线程在等待同一个锁时必须按照申请锁的时间顺序来依次获得锁而非公平锁则不保证这一点在锁被释放时任何一个等待锁的线程都有机会获得锁。synchronized 中的锁是非公平的ReentrantLock 默认情况下也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁。 公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。
synchronized 中的锁是非公平的ReentrantLock 默认情况下也是非公平的,但可以通过带布尔值的构造函数要求使用公平锁。
**3. 锁绑定多个条件** **3. 锁绑定多个条件**
一个 ReentrantLock 对象可以同时绑定多个 Condition 对象,而在 synchronized 中,锁对象的 wait() 和 notify() 或 notifyAll() 方法可以实现一个隐含的条件,如果要和多于一个的条件关联的时候,就不得不额外地添加一个锁,而 ReentrantLock 则无须这样做,只需要多次调用 newCondition() 方法即可 一个 ReentrantLock 对象可以同时绑定多个 Condition 对象。
## synchronized 和 ReentrantLock 比较 ## synchronized 和 ReentrantLock 比较
@ -551,7 +553,7 @@ synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。
**2. 性能** **2. 性能**
从性能上来看,新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等。目前来看它和 ReentrantLock 的性能基本持平了,因此性能因素不再是选择 ReentrantLock 的理由。synchronized 有更大的性能优化空间,应该优先考虑 synchronized。 新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等。目前来看它和 ReentrantLock 的性能基本持平了,因此性能因素不再是选择 ReentrantLock 的理由。synchronized 有更大的性能优化空间,应该优先考虑 synchronized。
**3. 功能** **3. 功能**

View File

@ -44,14 +44,13 @@
* [TCP 流量控制](#tcp-流量控制) * [TCP 流量控制](#tcp-流量控制)
* [TCP 拥塞控制](#tcp-拥塞控制) * [TCP 拥塞控制](#tcp-拥塞控制)
* [六、应用层](#六应用层) * [六、应用层](#六应用层)
* [域名系统 DNS](#域名系统-dns) * [域名系统](#域名系统)
* [文件传送协议 FTP](#文件传送协议-ftp) * [文件传送协议](#文件传送协议)
* [远程终端协议 TELNET](#远程终端协议-telnet) * [远程登录协议](#远程登录协议)
* [电子邮件协议](#电子邮件协议) * [电子邮件协议](#电子邮件协议)
* [动态主机配置协议 DHCP](#动态主机配置协议-dhcp) * [动态主机配置协议](#动态主机配置协议)
* [点对点传输 P2P](#点对点传输-p2p)
* [Web 页面请求过程](#web-页面请求过程)
* [常用端口](#常用端口) * [常用端口](#常用端口)
* [Web 页面请求过程](#web-页面请求过程)
* [参考资料](#参考资料) * [参考资料](#参考资料)
<!-- GFM-TOC --> <!-- GFM-TOC -->
@ -62,20 +61,19 @@
网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。 网络把主机连接起来,而互联网是把多种不同的网络连接起来,因此互联网是网络的网络。
<div align="center"> <img src="../pics//network-of-networks.gif" width=""/> </div><br> <div align="center"> <img src="../pics//network-of-networks.gif" width="500"/> </div><br>
## ISP ## ISP
互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。 互联网服务提供商 ISP 可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 ISP 缴纳一定的费用就可以接入互联网。
<div align="center"> <img src="../pics//46cec213-3048-4a80-aded-fdd577542801.jpg" width=""/> </div><br> <div align="center"> <img src="../pics//46cec213-3048-4a80-aded-fdd577542801.jpg" width="500"/> </div><br>
目前的互联网是一种多层次 ISP 结构ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。 目前的互联网是一种多层次 ISP 结构ISP 根据覆盖面积的大小分为第一层 ISP、区域 ISP 和接入 ISP。
互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。 互联网交换点 IXP 允许两个 ISP 直接相连而不用经过第三个 ISP。
<div align="center"> <img src="../pics//Technology-ComputerNetworking-Internet-ISPs.png" width=""/> </div><br> <div align="center"> <img src="../pics//168e893c-e4a0-4ba4-b81f-9d993483abd0.jpg" width="500"/> </div><br>
## 主机之间的通信方式 ## 主机之间的通信方式
@ -87,9 +85,7 @@
## 电路交换与分组交换 ## 电路交换与分组交换
<div align="center"> <img src="../pics//5e8d3c04-d93b-48a7-875e-41ababed00e0.jpg" width=""/> </div><br> <div align="center"> <img src="../pics//b0c97118-8f30-4619-9c22-a141f627db39.png" width=""/> </div><br>
(以上分别为:电路交换、报文交换以及分组交换)
### 1. 电路交换 ### 1. 电路交换
@ -109,17 +105,17 @@
## 时延 ## 时延
总时延 = 发送时延 + 传播时延 + 处理时延 + 排队时延 总时延 = 传输时延 + 传播时延 + 处理时延 + 排队时延
<div align="center"> <img src="../pics//3939369b-3a4a-48a0-b9eb-3efae26dd400.png" width="800"/> </div><br> <div align="center"> <img src="../pics//3939369b-3a4a-48a0-b9eb-3efae26dd400.png" width="800"/> </div><br>
### 1. 发送时延 ### 1. 传输时延
主机或路由器发送数据帧所需要的时间。 主机或路由器传输数据帧所需要的时间。
<div align="center"><img src="https://latex.codecogs.com/gif.latex?delay=\frac{l(bit)}{v(bit/s)}"/></div> <br> <div align="center"><img src="https://latex.codecogs.com/gif.latex?delay=\frac{l(bit)}{v(bit/s)}"/></div> <br>
其中 l 表示数据帧的长度v 表示发送速率。 其中 l 表示数据帧的长度v 表示传输速率。
### 2. 传播时延 ### 2. 传播时延
@ -186,26 +182,32 @@ TCP/IP 协议族是一种沙漏形状中间小两边大IP 协议在其中
## 通信方式 ## 通信方式
- 单向通信,又称为单工通信; 根据信息在传输线上的传送方向,分为以下三种通信方式:
- 双向交替通信,又称为半双工通信;
- 双向同时通信,又称为全双工通信。 - 单工通信:单向传输
- 半双工通信:双向交替传输
- 全双工通信:双向同时传输
## 带通调制 ## 带通调制
模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。 模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。
<div align="center"> <img src="../pics//7b68b142-9489-44f6-87b0-4cb5c6431e63.jpg" width="600"/> </div><br> <div align="center"> <img src="../pics//f0a31c04-6e26-408c-8395-88f4e2ae928b.jpg"/> </div><br>
## 信道复用技术 ## 信道复用技术
### 1. 频分复用、时分复用 ### 1. 频分复用、时分复用
频分复用的所有用户在相同的时间占用不同的频率带宽资源;时分复用的所有用户在不同的时间占用相同的频率带宽资源。 频分复用的所有用户在相同的时间占用不同的频率带宽资源。
<div align="center"> <img src="../pics//c4c14368-519c-4a0e-8331-0a553715e3e7.jpg"/> </div><br>
时分复用的所有用户在不同的时间占用相同的频率带宽资源。
<div align="center"> <img src="../pics//fa2273c3-1b5f-48ce-8e8b-441a4116c1c4.jpg"/> </div><br>
使用这两种方式进行通信,在通信的过程中用户会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其它用户使用,因此这两种方式对信道的利用率都不高。 使用这两种方式进行通信,在通信的过程中用户会一直占用一部分信道资源。但是由于计算机数据的突发性质,通信过程没必要一直占用信道资源而不让出给其它用户使用,因此这两种方式对信道的利用率都不高。
<div align="center"> <img src="../pics//f3bfe11f-9cba-4ff2-8cc6-629068408a80.jpg" width="600"/> </div><br>
### 2. 统计时分复用 ### 2. 统计时分复用
是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。 是对时分复用的一种改进,不固定每个用户在时分复用帧中的位置,只要有数据就集中起来组成统计时分复用帧然后发送。
@ -752,9 +754,9 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、
# 六、应用层 # 六、应用层
## 域名系统 DNS ## 域名系统
是一个分布式数据库,提供了主机名和 IP 地址之间的转换。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。 DNS 是一个分布式数据库,提供了主机名和 IP 地址之间的转换。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。
域名具有层次结构,从上到下依次为:根域名、顶级域名、第二级域名。 域名具有层次结构,从上到下依次为:根域名、顶级域名、第二级域名。
@ -765,7 +767,7 @@ DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大
- 因为 UDP 最大只支持 512 字节的数据,如果返回的响应超过的 512 字节就改用 TCP 进行传输。 - 因为 UDP 最大只支持 512 字节的数据,如果返回的响应超过的 512 字节就改用 TCP 进行传输。
- 区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据,区域传送需要使用 TCP 进行传输。 - 区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据,区域传送需要使用 TCP 进行传输。
## 文件传送协议 FTP ## 文件传送协议
FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件: FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
@ -776,7 +778,7 @@ FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
- 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20客户端的端口号随机但是必须大于 1024因为 0\~1023 是熟知端口号。 - 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20客户端的端口号随机但是必须大于 1024因为 0\~1023 是熟知端口号。
<div align="center"> <img src="../pics//902ef59f-7bcb-45a1-a80a-2f7afaa03629.jpg"/> </div><br> <div align="center"> <img src="../pics//03f47940-3843-4b51-9e42-5dcaff44858b.jpg"/> </div><br>
- 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。 - 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
@ -784,7 +786,7 @@ FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。 主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。
## 远程终端协议 TELNET ## 远程登录协议
TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。 TELNET 用于登录到远程主机上,并且远程主机上的输出也会返回。
@ -792,7 +794,9 @@ TELNET 可以适应许多计算机和操作系统的差异,例如不同操作
## 电子邮件协议 ## 电子邮件协议
一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件发送协议和读取协议。其中发送协议常用 SMTP读取协议常用 POP3 和 IMAP。 一个电子邮件系统由三部分组成:用户代理、邮件服务器以及邮件协议。
邮件协议包含发送协议和读取协议,发送协议常用 SMTP读取协议常用 POP3 和 IMAP。
<div align="center"> <img src="../pics//7b3efa99-d306-4982-8cfb-e7153c33aab4.png" width="700"/> </div><br> <div align="center"> <img src="../pics//7b3efa99-d306-4982-8cfb-e7153c33aab4.png" width="700"/> </div><br>
@ -802,7 +806,7 @@ POP3 的特点是只要用户从服务器上读取了邮件,就把该邮件删
### 2. IMAP ### 2. IMAP
IMAP 协议中客户端和服务器上的邮件保持同步如果不去手动删除邮件那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。IMAP 协议也支持创建自定义的文件夹。 IMAP 协议中客户端和服务器上的邮件保持同步如果不去手动删除邮件那么服务器上的邮件也不会被删除。IMAP 这种做法可以让用户随时随地去访问服务器上的邮件。
### 3. SMTP ### 3. SMTP
@ -810,27 +814,34 @@ SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进
<div align="center"> <img src="../pics//ed5522bb-3a60-481c-8654-43e7195a48fe.png" width=""/> </div><br> <div align="center"> <img src="../pics//ed5522bb-3a60-481c-8654-43e7195a48fe.png" width=""/> </div><br>
## 动态主机配置协议 DHCP ## 动态主机配置协议
DHCP 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。 DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要去手动配置 IP 地址等信息。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。
DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、默认路由器 IP 地址、域名服务器的 IP 地址。 DHCP 工作过程如下:
工作方式如下:需要 IP 地址的主机广播发送 DHCP 发现报文(将目的地址置为全 1即 255.255.255.255:67源地址设置为全 0即 0.0.0.0:68DHCP 服务器收到发现报文之后,则在 IP 地址池中取一个地址,发送 DHCP 提供报文给该主机。 1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67源地址为 0.0.0.0:68被放入 UDP 中,该报文被广播到同一个子网的所有主机上。
2. DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个 DHCP 服务器提供的信息,因此客户端需要进行选择。
3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。
## 点对点传输 P2P <div align="center"> <img src="../pics//bf16c541-0717-473b-b75d-4115864f4fbf.jpg"/> </div><br>
把某个文件分发的所有对等集合称为一个洪流。文件的数据单元称为文件块,它的大小是固定的。一个新的对等方加入某个洪流,一开始并没有文件块,但是能够从其它对等方中逐渐地下载到一些文件块,与此同时,它也为别的对等方上传一些文件块 如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理
每个洪流都有一个基础设施,称为追踪器。当一个对等方加入洪流时,必须向追踪器登记,并周期性地通知追踪器它仍在洪流中。可以在任何时间加入和退出某个洪流。 ## 常用端口
一个新的对等方加入洪流时,追踪器会随机从洪流中选择若干个对等方,并让新对等方与这些对等方建立连接,把这些对等方称为相邻对等方。接收和发送文件块都是在相邻对等方中进行。 |应用| 应用层协议 | 端口号 | 运输层协议 | 备注 |
| :---: | :--: | :--: | :--: | :--:
当一个对等方需要很多文件块时,通过使用最稀有优先的策略来取得文件块,也就是一个文件块在相邻对等方中副本最少,那么就优先请求这个文件块。 | 域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP |
| 动态主机配置协议 | DHCP | 67/68 | UDP | |
当很多对等方向同一个对等方请求文件块时,该对等方优先选择以最高速率向其发送文件块的对等方。 | 简单网络管理协议 | SNMP | 161/162 | UDP | |
| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21数据连接 20
P2P 是一个分布式系统,任何时候都有对等方加入或者退出。使用分布式散列表 DHT可以查找洪流中的资源和 IP 地址映射。 | 远程终端协议 | TELNET | 23 | TCP | |
| 超文本传送协议 | HTTP | 80 | TCP | |
| 简单邮件传送协议 | SMTP | 25 | TCP | |
| 邮件读取协议 | POP3 | 110 | TCP | |
| 网际报文存取协议 | IMAP | 143 | TCP | |
## Web 页面请求过程 ## Web 页面请求过程
@ -892,20 +903,6 @@ P2P 是一个分布式系统,任何时候都有对等方加入或者退出。
- 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。 - 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。
## 常用端口
|应用| 应用层协议 | 端口号 | 运输层协议 | 备注 |
| :---: | :--: | :--: | :--: | :--:
| 域名解析 | DNS | 53 | UDP/TCP | 长度超过 512 字节时使用 TCP |
| 动态主机配置协议 | DHCP | 67/68 | UDP | |
| 简单网络管理协议 | SNMP | 161/162 | UDP | |
| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21数据连接 20
| 远程终端协议 | TELNET | 23 | TCP | |
| 超文本传送协议 | HTTP | 80 | TCP | |
| 简单邮件传送协议 | SMTP | 25 | TCP | |
| 邮件读取协议 | POP3 | 110 | TCP | |
| 网际报文存取协议 | IMAP | 143 | TCP | |
# 参考资料 # 参考资料
@ -914,6 +911,9 @@ P2P 是一个分布式系统,任何时候都有对等方加入或者退出。
- W.RichardStevens. TCP/IP 详解. 卷 1, 协议 [M]. 机械工业出版社, 2006. - W.RichardStevens. TCP/IP 详解. 卷 1, 协议 [M]. 机械工业出版社, 2006.
- [Active vs Passive FTP Mode: Which One is More Secure?](https://securitywing.com/active-vs-passive-ftp-mode/) - [Active vs Passive FTP Mode: Which One is More Secure?](https://securitywing.com/active-vs-passive-ftp-mode/)
- [Active and Passive FTP Transfers Defined - KB Article #1138](http://www.serv-u.com/kb/1138/active-and-passive-ftp-transfers-defined) - [Active and Passive FTP Transfers Defined - KB Article #1138](http://www.serv-u.com/kb/1138/active-and-passive-ftp-transfers-defined)
- [How DHCP works and DHCP Interview Questions and Answers](http://webcache.googleusercontent.com/search?q=cache:http://anandgiria.blogspot.com/2013/09/windows-dhcp-interview-questions-and.html)
- [What is process of DORA in DHCP?](https://www.quora.com/What-is-process-of-DORA-in-DHCP)
- [What is DHCP Server ?](https://tecadmin.net/what-is-dhcp-server/)
- [Tackling emissions targets in Tokyo](http://www.climatechangenews.com/2011/html/university-tokyo.html) - [Tackling emissions targets in Tokyo](http://www.climatechangenews.com/2011/html/university-tokyo.html)
- [What does my ISP know when I use Tor?](http://www.climatechangenews.com/2011/html/university-tokyo.html) - [What does my ISP know when I use Tor?](http://www.climatechangenews.com/2011/html/university-tokyo.html)
- [Technology-Computer Networking[1]-Computer Networks and the Internet](http://www.linyibin.cn/2017/02/12/technology-ComputerNetworking-Internet/) - [Technology-Computer Networking[1]-Computer Networks and the Internet](http://www.linyibin.cn/2017/02/12/technology-ComputerNetworking-Internet/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB