EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 邵教授专栏 于 2022-9-19 15:09 编辑
7 i& A' b, ?9 n0 V$ C& w( d1 {& Z: v7 h3 }0 |
八戒一脸茫然地盯着新搭起来的实验台,问猴哥:“为啥我这个图像这么模糊?明明是按照你的要求搭起来的,不是你个猴头在骗我吧?”悟空道:“呆子,你且走开,看老孙的!”只见那行者从耳朵里掏出了金箍棒,说:变!那金箍棒顿时发出七彩炫光,直入光路,屏幕中的图像马上变得清晰起来。八戒激动地大喊:“猴哥,真有你的!这个变出来的炫光是什么东西啊?好玩,好玩!”行者道:“呆子,这叫计算照明!”, M% M" ]' \! L8 p+ v/ Q! U
1 n# y5 M0 s& T4 m0 L- \* v' J! a. w1 F; o/ z
图1孙悟空的金箍棒
* R4 A9 ?; N) F, f: |7 M' C5 Y" \8 g; P5 L7 s1 N& K
八戒同学自从当上了研究僧,一直很努力,也小有进步,对大师兄越来越不服。无奈天生的身份,再加上总改不了囫囵吞枣的毛病,不重视概念和定义,往往一知半解就觉得自己了不起。哎,想想也是,好像不只刚鬣一个同学是这样的。
0 S) r, t: f/ |. k$ F3 ]$ L那么,什么是计算照明呢?为什么要计算照明?主动光能用照明,在被动探测中,有什么参考价值?5 w7 q. F; M) L6 P
一、什么是计算照明? 计算光学成像中,计算照明是非常重要的组成部分,在主动成像中扮演着重要的角色。所谓计算照明,就是在成像照明的光源端做空间、时间和物理维度的编码过程,目的是提高成像分辨率和提高环境适应能力等。8 T0 W1 n; l( k/ b3 o4 G
首先,我们来看看照明能在哪些方面编码。一般说编码,大家多会从物理维度考虑,比如:强度、相位、光谱、偏振等。其实,在空间维度和时间维度也可以做编码,而在实际应用中,我们更应该综合考虑编码问题。说到这里,你有没有感到熟悉?如果不熟,那就是你没有认真读第二篇“光场:计算光学成像的灵魂”!就是说,照明可以写成如下的形式:% e; o/ e* b; H5 ]
Illum(x,y,z,t,I, φ,λ,P…)- Z% W4 [% s1 `& l, E& ]- [) c
其中,x,y,z为空间坐标,t为时间,I为强度,φ为相位,λ为光谱,P为偏振。
$ p0 P9 n8 ^) C( e% S, E5 X4 b5 D% @% K
1 v9 E8 I8 Z: I& ~' a1 T
1 L9 f% F( p) D$ u" \; e/ t9 p) L
图2 光场传输示意图
4 v2 | d9 q( [* R8 d6 u( Y' l: A: _7 W8 h
& u- w' N7 ~& I0 Q$ v9 L/ |
你看,这不就是光场吗?是的,照明不但是光场,而且,它是被赋予了神奇力量的光场,可以对它进行人地干预,设计出你所需要的光场。我们把人工干预、参与调制的这个过程称为编码。在数学中,它是一个变换表达式,经常地,可写成矩阵的形式。哈,这是不是又来了一个线性变换的例子?
& K% I' g8 V' G: o. p |: H, X不过,需要说明的是,目前大家用的都是简单维度的照明编码方式。最简单的形式是“零”编码,也就是直接光源照明,不编码;其次的空间和时间编码,那么,高级一点的就是在物理维度上做编码。
+ y7 q) M) A8 t很显然,编码的维度越高,意味着光场的调制自由度越大。你说,是不是编码维度越高就光场就越厉害,就能战无不胜?我欣赏你这么率直,但你的思考维度还需要进一步提升啊!什么是好的?能满足需求的、越简单的越好!直接能列方程组解问题的,绝对不要使用奇技淫巧。高射炮打蚊子,非必要轻易不要使用!
, g4 V5 {# B/ o# C# l注意:计算照明还有一个非常重要的功能,那就是提升光场维度。在前面的多篇文章里已经解释过:维度提升意味着能够解决低维度无法处理的问题。
/ G1 t! N8 o$ c4 u3 s* M5 N+ f6 |) M8 Y6 ^- s
+ C" H2 v4 a+ \. C
, q$ G" B- f1 j1 P. E
图3 从一维空间到多维空间0 t& `' n# n# O% x8 [! ^$ a
# W6 Z: O1 p- U+ G2 V4 V5 O
- X* ^- P6 y3 C, s
然后,我们来看看常见的计算照明都有哪些。在空间维度上,大家最熟悉的可能就是结构光了,其实还有自愈合光束、散射光等;时间维度上,典型的有脉冲光束和时间编码光束。物理维度,有偏振光、量子纠缠光、涡旋光等。其实,还有一些拓展照明光,比如傅里叶望远镜中的主动激光照明,实际上是光在频域中的拓展应用。最后,我需要说,我们更需要在空间、时间和物理维度上根据光场的需要,做出新的计算照明光场,这才是我们今后更要大力发展的,这也是计算照明领域中最广阔的空间。悟能同学,你悟到了没?如果还不懂,你再去读一读这篇文章“光场:计算光学成像的灵魂”。
7 R5 d7 @+ `- l
% e* J+ w2 r' Y7 ~2 g5 j
t' Q1 h9 w4 ~0 L, b2 A( D1 L8 B3 j9 h' y' g5 s/ D( T6 a z
二、为什么要计算照明? 照明是个好东西!漆黑的夜晚,打开手电,你能看清脚下的路。我们生活在一个离不开光的世界里,造物主给了我们能够感知可见光的眼睛,我们能欣赏到美丽的自然景色,也看到了人间的罪恶。在黑暗的夜里,那一缕灯光就是指路明灯,那一道亮光可能就是制止罪恶发生的达摩剑。其实,这是因为眼睛在太黑的环境中,感光细胞的响应灵敏度明显下降,只有通过补光,才能达到一定的信噪比,让我们看清这个世界。这时,照明是起着提高信噪比的作用。
, |- |- z( y* I. J计算光学成像的目标是“更高、更远、更广、更小和更强”(详见第一篇),虽然光电成像大多是被动成像方式,隐蔽性好,不易暴露,但也使得系统性能受限;同时受制于环境影响严重的问题,比如在夜晚,可见光相机很难看清楚物体。但当我们引入计算照明,比如在工业和医学等领域人为地干预、设计照明光场,便给了我们非常大的能力发挥空间。: n R+ k: B" p7 ]* r, X
这时候,计算照明就真的变成了孙悟空那根神奇的金箍棒!下面,我们就几个典型的计算照明做个分析。) n( Z' G0 q) G O; K+ Z
结构光——提升成像分辨率和三维形貌成像的利器% ^! M% p7 \) J
在追求高分辨率的历程中,科学家的追求是无止境的,谁都想打破衍射极限。可是,这条路很苦,各路神仙纷纷登场,我们来看看照明能起点啥作用。最先登场的就是结构光。相信大家对此都很熟悉了,结构光不但可以进行三维形貌成像,而且可以提高成像分辨率。最经典的例子就是SIM(Structure Illumination Microscopy,结构光照明显微成像),其原理莫尔条纹(Moire pattern)是18世纪法国莫尔首先发现的一种光学现象。从技术角度上讲,莫尔条纹是两条线或两个物体之间以恒定的角度和频率发生干涉的视觉结果。当人眼无法分辨这两条线或两个物体时,只能看到干涉的花纹,这种光学现象中的花纹就是莫尔条纹。SIM的成像分辨率约为衍射极限的1/2,研究的人员很多,论文也比比皆是,在此不详述。3 u* {4 f3 J; N+ k1 u0 G- x
) b( P0 I: t, |5 E. k% G
6 Z- G; b7 p% A+ q G 图四 摩尔条纹效应8 i6 \) q- C3 k1 Q8 V L0 E% p
% w8 n. n! ?! X" r# V然后,我们再看结构光的三维成像技术。结构光三维成像是利用投影技术,将调制后的周期性光场信号投射到物体,在物体表面光场信号会因形貌变化而发生变化,从其变化中解译出相位信息,从而重建出物体的三维形貌。这些在前面的文章里已有论述,研究者甚众,不再赘述。
5 t2 D+ @; }- w* P( {" } N2 l2 G, g) A2 I7 B2 I" M \
1 @3 r; `4 k7 W( {2 w图5 基于格雷码图案投影的结构光三维成像技术5 p+ z5 V; p. {$ V+ T% \
W3 n9 R& }8 F( D/ n0 `
下面我们来看看散射光场吧,它是特殊的结构光,与普通结构光不同的是,散射光场是随机调制,而且是幅值和相位同时调制的非周期性光场信号。作为结构光,散射光场当然可以超分辨率成像,而且它具有更大的优势是在很多应用场合,散射介质是自然存在的,比如生物组织、水和大气等,可以自然获取散射光场,只是,我们对光场的研究还不够透彻,很多时候我们认为散射是不利的,需要回避;同时,它当然可以三维成像,这些内容,我在“散射成像:又爱又恨的散射”中已有论述。3 j: e5 i1 p+ }! l
自愈合光束——传得更远,功能很强大!( i1 U# d+ q, h( o0 j
无衍射光束(又称自愈合光束):1987年由J.Durnin首次提出,是自由空间标量波动方程的一组特殊解,光场分布具有第一类零阶贝塞尔函数的形式。其特点是在无界的自由空间传播时,与传播方向垂直的每个平面光场分布是保持相同的,并且具有高度的局域化强度分布,也就是说光束中电场强度的横向分布很集中,这类光场绝对不遭受衍射扩展,因此称为无衍射光束。用轴锥透镜聚焦高斯光束可形成贝塞尔-高斯光束。贝塞尔光束的光强分布与传播距离无关,具有两个优异的特性:无衍射特性和自愈特性。0 t9 O: e3 n6 y( J1 J0 b
- y8 V9 _4 A! Y6 }! h* \
+ X6 R) z- u/ \% X, h0 A. r8 Y( |
图6 高斯光束与贝塞尔光束的传播, m" X8 H5 U, M+ l4 X
" N9 T; V7 Y R对于实验中所获得的近似贝塞尔光束,一般认为只要光束中间亮斑(或暗斑)的强度和尺寸不随传播距离发生变化,即可近似认为该光束具有无衍射特性。自愈特性是指当贝塞尔光束在传播的过程中经过障碍物后,其波面会因为障碍物的衍射、散射、吸收等发生改变,但是当它再继续传播一段距离后,其光强分布又会得到恢复,即恢复贝塞尔分布。
B; x) D" P5 N5 o0 E. @: l+ o, M& J2 c5 }# L' {, z: S6 b
! v! u* `; B: l0 M3 _% [图7 贝塞尔光束的自愈合特性% v/ Y8 i- k% L( d
+ j( O) h+ z# r) P. X+ Q& q
哇,是不是很神奇?不但神奇,而且很强大。那下面我们来看看自愈合光束的应用。
( p3 K+ q' a" u' t# i% x$ A(1)非线性光学显微成像——传得更远!
9 e; d: r* f5 D# T非线性光学显微成像技术是利用非线性光学效应产生的非线性光学信号对微观物体进行显微成像的技术。与传统的显微成像技术相比,非线性光学显微成像技术具有很多优点。由于非线性光学效应具有较高的阈值,只有当激光功率密度达到一定值时才能够发生,通常只发生在焦点处,因此非线性光学显微成像技术具有天然的3D成像能力。无需对目标进行荧光标记,避免了荧光毒性,且入射的激光能量被完全转换成出射的光子能量,也降低了探测生物被杀伤的可能性。此外,非线性光学显微系统中所采用的激光器波长处于近红外,大大增加了成像深度。目前,非线性光学显微技术因其高空间分辨率,无需荧光标记和穿透深度深等优点已经广泛应用于生命科学、生物医学和材料科学等领域。
7 w+ H: p7 R. m, q* s Y9 Z在传统的非线性光学显微技术中采用高斯光束作为激发光,然而高斯光束在介质中会发生衍射和散射,造成严重的相位失配,在很大程度上降低了信号的强度。此外,散射也使得激发光的强度严重减弱,缩短成像深度。0 k3 r8 j' |$ [- E0 i \" K
近些年来,贝塞尔光束由于其无衍射和自愈的特性被用于非线性光学显微技术中。由于具有无衍射的特性,贝塞尔光束作为激发光可以实现较长距离的相位匹配,增强非线性光学信号;同时贝塞尔光束的无衍射特性也可以增加单次扫描厚度,从而增加了扫描速度,减少了对样品的损伤。另一方面,由于具有自愈特性,贝塞尔光束可以绕过散射物进行非线性光学成像,有效地增加了成像深度,适用于深层组成的成像。2 b1 H- d! }" N& K1 J
(2)贝塞尔光片显微扫描成像——更广、更高- Q; M- A/ P5 c7 r$ e
贝塞尔光片荧光显微利用微米级厚度的激发光片激发生物样品的荧光,在与激发光片方向垂直的方向探测样品的荧光信号,形成一张二维图像。光片显微成像只会激发焦平面附近的荧光分子,具有三维层析成像速度快、光漂白弱和光毒性小等优点,是生命科学领域中重要的三维成像工具,可以扩大观测视场,实现高时空分辨率。+ o( G& U/ ~- `9 f4 W# |& y
3 c( g( X6 x1 q* s9 v7 G
f0 m) M. U! Y, T K7 \& n
图8 基于贝塞尔光束的光片显微扫描成像 ~. a1 _4 A" i1 \8 v
7 C) t: o* O" J3 P
(3)超分辨率成像——更高; C/ A, `7 P" [2 j
贝塞尔光束特殊的物理结构让突破衍射极限的超分辨成像成为了可能,但轴锥透镜无法对物体直接成像。因此通过将普通透镜和轴锥透镜级联使用,并且将目标成像物体放置于普通透镜前焦面处,将不同位置的物点的光波转化为一系列平面波,如下图所示,不同位置的物点的光以不同颜色表示;轴锥透镜将这些平面波进行超衍射聚焦,从而实现超分辨成像。: J6 J4 g8 p4 D* e3 v
) P! l( l3 x: ?& o: X" m
图9 贝塞尔光束超分辨率成像
& o$ n7 R* @7 B
: b+ Q' G" L& x" [. p& h- X贝塞尔光束超分辨成像技术是利用轴锥透镜这种特殊的光学相位器件对点扩散函数进行调制实现的,在聚焦光斑主级半峰全宽减小的同时,光斑的次级旁瓣的强度随之提高,像点会产生水波纹状的强度分布。
; H8 [. I O' L6 G$ G看到这里,你是不是会觉得自愈合光束太强大了?其实,它的强大远不止这些。自愈合光束在激光加工和激光武器中都有很好的应用,贝塞尔光束极细的中心光斑和较大的焦深可用于材料微细加工,如激光打孔;在激光武器中,三维艾里-贝塞尔光子弹,可以绕过掩体而直击目标。由于无衍射的特点,无衍射光束贝塞尔光和艾里光束已经被广泛用于俘获原子和微观粒子,这就是获得诺贝尔奖的那个“光镊”。 - _) y( Q& K8 J9 y
普通光的轨道角动量为零,拉盖尔-高斯光束经过轴棱锥形成螺旋贝塞尔光束,产生的螺旋贝塞尔光束(高阶贝塞尔涡旋光束)具有非零的轨道角动量,而非零的轨道角动量可以携带大量信息,这种特征可以用在量子信息探测。无衍射光束因中心光斑直径较小并且发散角为零,在自由空间光通信领域具有良好的应用前景。除了贝塞尔光束,艾里光束在传输时具有光束扩展小、湍流环境中抗干扰能力强、自由空间发生自聚焦等特点。
# X; t" g' w4 g) O' F2 p
) V" k, F" e( j5 o' g4 ^; ~' H图10 拉盖尔-高斯光束
4 @. d' ?# n# @/ Y0 Q& }, b偏振光照明——更远,更高,更强 ; G, s7 W0 v+ `4 u+ Y$ i6 j5 t
在“偏振:古老却依然很新鲜”一文中,我们重点讲的是被动偏振成像技术,在这里,我们重点讲主动偏振光成像,就是利用调制的偏振光照明,获取偏振光场的信息。
$ O4 o# V _0 B+ l8 v偏振水下成像的原理是利用目标反射光和后向散射光偏振信息的差异将二者分离,从而获取清晰场景图像。为了增加目标反射光与后向散射光偏振度的差异,提升水下成像质量,在自然光无法照到的深海或夜间等场景,可采用偏振光作为照明光源进行成像。其中一种偏振光照明的方法是在成像过程中由光源出射的非偏振光,经过偏振片调制后变成线偏振光。水体和目标对线偏振光会产生不同的退偏效应,表现为后向散射光和目标反射光具有不同的偏振度,突出了偏振的目标特性,可提升成像信噪比,也可提升作用距离。当然,在光源调制的过程中会损失能量,对光源要求比较高;同时,在探测时,因为偏振还会损失能量。
- b \$ _0 p6 w# ^8 N& P9 o% g
大部分生物组织在可见光和近红外波段都是高散射介质,光在组织中传播时往往经历多次散射,这一过程影响透过生物组织的成像深度。由于散射过程中光子偏振态的改变与散射介质的微观结构有密切关系,可以利用不同散射介质对偏振光的作用不同,实现透过生物组织成像。 % h1 E" x$ }% K! u9 b: {/ c5 W
图12 利用线偏振和圆偏振光对鸡颈部组织的测量结果。(a)和(b)为线偏振光源照明时探测器接收到的正交偏振方位角图像;(c)-(l)为采用圆偏振光照明并且采用不同角度的图像进行偏振差分成像的结果。 (3)偏振结构光成像——更高 / \6 H, {& W" } l
结构光照明时,入射光引入偏振态调控,可以增强干涉条纹的对比度。偏振调制的方法很多,这里介绍零级涡旋半波片(zero-order vortex half-wave retarder,VHR)偏振调制,在能量利用率方面,VHR的透过率与普通半波片类似,几乎没有能量损失,理论上接近100%,在系统复杂度和能量利用率方面有着明显的优势。
6 l% u) \9 D" ~2 @7 s @2 m- k& N
图13 零级涡旋半波片偏振控制过程示意图
# W+ n+ a- _2 R; b# ~; T0 V' A8 K
(4)偏振光场重聚焦——更深
a: j0 {/ v6 K2 X# k2017年,我的好朋友Sylvain Gigan教授在获取散射传输矩阵后,利用波前整形技术使透过散射介质后的偏振光重新聚焦,恢复了光波原始输入的偏振状态。该技术可以增加分子级显微镜在生物组织中的成像深度。
# \6 U% ~' \2 O. o + w9 m3 R2 ?! Y& o: G1 T
# u9 J! c$ k) X( M. s; ]图14 偏振光透过散射介质重聚焦 9 `- y# g5 A- R. z) u# A# m% ^
- 傅里叶叠层成像——开创计算照明新纪元
/ {- x4 t3 [$ s8 v G- R
傅里叶叠层成像绝对是计算照明的巅峰之作,载入历史,写进教材。我们还记得相干照明下成像分辨率的公式吧。 3 S' h/ y/ t& R5 E5 Y. V/ U/ A7 t
, ^8 n5 W% {% H4 i2 H$ I
在这里,NA是指光学系统的数值孔径,也就是NA=NALens。在傅里叶叠层成像出现之前,几乎很少人会去考虑除了光学系统之外的数值孔径问题。但傅里叶叠层成像出现后,NA发生了变化,变成了NA=NALens+NAillu,在这里NAillu是照明的数值孔径。 8 u( l8 x+ ~5 N8 K z2 {$ K
/ O+ [5 z3 j! D: \, _2 ?1 h) M$ c! q, Q) Z
图15 合成数值孔径 K% V8 |& t0 e
$ q% I) ^; X( @& V# }哇,这就好玩了!照明竟然还有数值孔径!自然,有了这个数值孔径就可以提升分辨率了。下面,我们来看看这个为超分辨率成像而生的傅里叶叠层成像。 7 y% q1 y) U$ ]8 s' E
傅里叶叠层成像的本质是合成孔径,只是这个合成孔径是利用照明这个工具,通过一个相机多次拍摄不同角度照射的场景进行频域延拓,重建出高分辨率的图像。我们来看看傅里叶叠层成像的原理:
; A: B& |; J9 r, L& A通过依次点亮不同位置的LED来对样品进行多角度照明,并采集每个照明角度对应的低分辨率强度图像。然后利用相位恢复算法在频域进行拼接,实现目标的高分辨率重建。它的机理是由于光与物质的相互作用(瑞利散射,米氏散射等),当改变照射样品的光线角度时,可以采集到样品不同角度的散射光(对应样品出射光波的不同空间频率,也就是样品频谱的不同区域)。因此原本超出物镜衍射极限的高频信息因为多角度的照明被移到系统的通带内,以强度图像的形式被记录下来。
% Z2 D$ T6 M1 \/ X/ d7 c! ^, X( f 0 L" ?$ Z' T! }' s
3 k$ j1 F2 v. |- A 图16 傅里叶叠层成像的照明方式
- z: o! X! w% s4 o( }# [) D8 v, Q
你看,计算照明是在光场维度上做了调制,为提高分辨率、提升作用距离、增强环境适应性带来了工具箱,随时开启。! P& L8 q4 o( b+ F
在这里,我还需要特别强调的一个例子是我的学生朱磊在Sylvian Gigan实验室做的工作:利用时变随机照明实现了透过散射介质超光学记忆效应范围的非侵入式成像,解决了散射自相关成像技术中光学记忆范围受限的难题,提出基于散斑指纹成对去卷积的图像重建方法,极大地简化了图像重建过程。在这里,时变随机照明其实就是照明在时间和空间维度上的一个变换,属于典型的计算照明,不仅搭建起了突破光学记忆效应边界条件的桥梁,而且可以进行超分辨率成像。这个工作也被Nikon公司做了特别报道。
1 D' }7 q( w' f; k% b2 l
+ M, e2 C9 V7 u- C5 T8 g
三、计算照明拥有美好的未来 其实,照明还有很多方法,在这篇文章里,只是选取了几个典型的案例作为引子,供大家参考。这些方法主要是提供点佐料,开拓开拓视野。那么计算照明的未来是什么?没有条件提供主动照明的情况下,我们还能不能用这些方法?怎么用?正如开始所说,计算照明的本质是人工干预光场的调制,在深度理解光场的基础上,根据需要引入光场的调制手段。从维度上看,我们可以从空间、时间和物理多个维度调制照明光场,很显然,我们可以拥有绚丽多彩的多种组合,变换手段多得真的就像孙猴子的那根金箍棒。 可以说,计算照明的前景很好,但现实还是很现实,似乎我们拥有的成熟度高的计算光场设计并不是很多,用起来也并没有那么得心应手,这是怎么回事?这么一问呢,又说到根子上了,那就是计算成像的灵魂——光场。我们对光场的理解深度和维度尚存在一定的距离,还需要更多地去探索,尤其是高维度光场怎么构建,高维度光场怎么用,光场与我们的那五个目标“更高、更远、更广、更小、更强”之间是什么关系,这些物理量相互的关系和桥梁是什么,这些都是我们还更多的人来研究这些问题。 计算照明既然是计算成像的金箍棒,一定是拥有美好的未来。前面大部分例子,其实多是少数维度的调制,这样做既有调制方法相对简单,又有对光场的理解深度不够的原因。但是我们更应该深刻地意识到:计算照明是我们能够对光场进行干预最容易也是方法最多的手段,这绝对是福音,我相信这根金箍棒绝对值得你拥有,只是,你必须回过头来静下心来好好研究光场。 再进一步思考,这些主动成像里的方法能否应用到被动成像中?可以肯定地说大部分不行,但不是所有的都不行。那到底哪些行?这就要看这些成像的条件是什么,这些边界条件直接决定成功与否。如何边界条件不成立,我们能不能想办法在被动成像里引入其他的方法,提升维度,架起条件缺失的那一道桥梁?这些,我想都应该是我们今后要好好去思考的问题。 不安分的心,是创新的动力。八戒同学,我知道,你一直有一颗不安分的心,从高老庄到女儿国,你那颗骚动的心处处衬托出你的创新动力。而且,你还有“没有困难制造困难也要上”的攻坚克难精神,是典型的Trouble Maker。也正是因为你,猴哥才有十八般武艺、七十二变化的本领展示,你为猴哥提供了战斗平台,在打败一个个小怪兽的路上终于升级成佛。猴哥真心谢谢你这个猪队友!要是没有你,猴哥早就成功了!
* F S8 E8 u1 X. |% B好了,八戒。猴哥希望你把那颗不安分的心用在“计算照明”的研究上,快看书去,别老盯着师妹!
3 _5 E) z4 ]; { o2 @2 j+ A. G
9 X, i% A" l# L) e6 E8 C0 c
' D3 {# H- ^% k3 i$ [
1 {6 C0 c: X: e) d6 d- g4 ~% X# I0 \& ~$ f/ d9 s" f
2 X* ^* d! Z0 ?. y" z2 |5 q- |( o
' N* ^, ~0 Z$ O
G/ M, A7 u* t! N0 T( q: t: Z, c1 W' y. a9 R) w& A- {
5 R" W$ p$ b7 {3 r' Q
2 A1 x5 O( T7 [; H8 {5 D
3 J* ]* V- m1 c& k
# ? v/ Z1 O" c* M7 D+ y |