Produced by Araxis Merge on 10/24/2017 6:38:23 AM Central Daylight Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.
| # | Location | File | Last Modified |
|---|---|---|---|
| 1 | CHAMP_VA1.zip\CHAMP_VA1\app\node_modules\express\node_modules\proxy-addr\node_modules\ipaddr.js\test | ipaddr.test.coffee | Mon Oct 16 21:06:50 2017 UTC |
| 2 | CHAMP_VA1.zip\CHAMP_VA1\app\node_modules\express\node_modules\proxy-addr\node_modules\ipaddr.js\test | ipaddr.test.coffee | Mon Oct 23 12:42:15 2017 UTC |
| Description | Between Files 1 and 2 |
|
|---|---|---|
| Text Blocks | Lines | |
| Unchanged | 6 | 528 |
| Changed | 5 | 36 |
| Inserted | 0 | 0 |
| Removed | 0 | 0 |
| Whitespace | |
|---|---|
| Character case | Differences in character case are significant |
| Line endings | Differences in line endings (CR and LF characters) are ignored |
| CR/LF characters | Not shown in the comparison detail |
No regular expressions were active.
| 1 | ipaddr = r equire '.. /lib/ipadd r' | |
| 2 | ||
| 3 | module.exp orts = | |
| 4 | 'should define mai n classes' : (test) - > | |
| 5 | test.o k(ipaddr.I Pv4?, 'def ines IPv4 class') | |
| 6 | test.o k(ipaddr.I Pv6?, 'def ines IPv6 class') | |
| 7 | test.d one() | |
| 8 | ||
| 9 | 'can con struct IPv 4 from oct ets': (tes t) -> | |
| 10 | test.d oesNotThro w -> | |
| 11 | new ipaddr.IPv 4([192, 16 8, 1, 2]) | |
| 12 | test.d one() | |
| 13 | ||
| 14 | 'refuses to constr uct invali d IPv4': ( test) -> | |
| 15 | test.t hrows -> | |
| 16 | new ipaddr.IPv 4([300, 1, 2, 3]) | |
| 17 | test.t hrows -> | |
| 18 | new ipaddr.IPv 4([8, 8, 8 ]) | |
| 19 | test.d one() | |
| 20 | ||
| 21 | 'convert s IPv4 to string cor rectly': ( test) -> | |
| 22 | addr = new ipadd r.IPv4([19 2, 168, 1, 1]) | |
| 23 | test.e qual(addr. toString() , '192.168 .1.1') | |
| 24 | test.d one() | |
| 25 | ||
| 26 | 'returns correct k ind for IP v4': (test ) -> | |
| 27 | addr = new ipadd r.IPv4([1, 2, 3, 4]) | |
| 28 | test.e qual(addr. kind(), 'i pv4') | |
| 29 | test.d one() | |
| 30 | ||
| 31 | 'allows to access IPv4 octet s': (test) -> | |
| 32 | addr = new ipadd r.IPv4([42 , 0, 0, 0] ) | |
| 33 | test.e qual(addr. octets[0], 42) | |
| 34 | test.d one() | |
| 35 | ||
| 36 | 'checks IPv4 addre ss format' : (test) - > | |
| 37 | test.e qual(ipadd r.IPv4.isI Pv4('192.1 68.007.0xa '), true) | |
| 38 | test.e qual(ipadd r.IPv4.isI Pv4('1024. 0.0.1'), true) | |
| 39 | test.e qual(ipadd r.IPv4.isI Pv4('8.0xa .wtf.6'), false) | |
| 40 | test.d one() | |
| 41 | ||
| 42 | 'validat es IPv4 ad dresses': (test) -> | |
| 43 | test.e qual(ipadd r.IPv4.isV alid('192. 168.007.0x a'), true) | |
| 44 | test.e qual(ipadd r.IPv4.isV alid('1024 .0.0.1'), false ) | |
| 45 | test.e qual(ipadd r.IPv4.isV alid('8.0x a.wtf.6'), false ) | |
| 46 | test.d one() | |
| 47 | ||
| 48 | 'parses IPv4 in se veral weir d formats' : (test) - > | |
| 49 | test.d eepEqual(i paddr.IPv4 .parse('19 2.168.1.1' ).octets, [192, 168 , 1, 1]) | |
| 50 | test.d eepEqual(i paddr.IPv4 .parse('0x c0.168.1.1 ').octets, [192, 168 , 1, 1]) | |
| 51 | test.d eepEqual(i paddr.IPv4 .parse('19 2.0250.1.1 ').octets, [192, 168 , 1, 1]) | |
| 52 | test.d eepEqual(i paddr.IPv4 .parse('0x c0a80101') .octets, [192, 168 , 1, 1]) | |
| 53 | test.d eepEqual(i paddr.IPv4 .parse('03 0052000401 ').octets, [192, 168 , 1, 1]) | |
| 54 | test.d eepEqual(i paddr.IPv4 .parse('32 32235777') .octets, [192, 168 , 1, 1]) | |
| 55 | test.d one() | |
| 56 | ||
| 57 | 'barfs a t invalid IPv4': (te st) -> | |
| 58 | test.t hrows -> | |
| 59 | ipad dr.IPv4.pa rse('10.0. 0.wtf') | |
| 60 | test.d one() | |
| 61 | ||
| 62 | 'matches IPv4 CIDR correctly ': (test) -> | |
| 63 | addr = new ipadd r.IPv4([10 , 5, 0, 1] ) | |
| 64 | test.e qual(addr. match(ipad dr.IPv4.pa rse('0.0.0 .0'), 0), true) | |
| 65 | test.e qual(addr. match(ipad dr.IPv4.pa rse('11.0. 0.0'), 8), false) | |
| 66 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 8), true) | |
| 67 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 8), true) | |
| 68 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 8), tr ue) | |
| 69 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 16), t rue) | |
| 70 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 16), f alse) | |
| 71 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 15), t rue) | |
| 72 | test.equal (addr.matc h(ipaddr.I Pv4.parse( ' IP '), 32), f alse) | |
| 73 | test.e qual(addr. match(addr , 32), tru e) | |
| 74 | test.d one() | |
| 75 | ||
| 76 | 'parses IPv4 CIDR correctly' : (test) - > | |
| 77 | addr = new ipadd r.IPv4([10 , 5, 0, 1] ) | |
| 78 | test.e qual(addr. match(ipad dr.IPv4.pa rseCIDR('0 .0.0.0/0') ), true) | |
| 79 | test.e qual(addr. match(ipad dr.IPv4.pa rseCIDR('1 1.0.0.0/8' )), false ) | |
| 80 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /8')), true) | |
| 81 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /8')), true) | |
| 82 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /8')), tru e) | |
| 83 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /16')), tr ue) | |
| 84 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /16')), fa lse) | |
| 85 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /15')), tr ue) | |
| 86 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /32')), fa lse) | |
| 87 | test.equal (addr.matc h(ipaddr.I Pv4.parseC IDR(' IP /32')), tr ue) | |
| 88 | test.t hrows -> | |
| 89 | ipaddr.IPv 4.parseCID R(' IP ') | |
| 90 | test.t hrows -> | |
| 91 | ipad dr.IPv4.pa rseCIDR('0 .0.0.0/-1' ) | |
| 92 | test.t hrows -> | |
| 93 | ipad dr.IPv4.pa rseCIDR('0 .0.0.0/33' ) | |
| 94 | test.d one() | |
| 95 | ||
| 96 | 'detects reserved IPv4 netwo rks': (tes t) -> | |
| 97 | test.e qual(ipadd r.IPv4.par se('0.0.0. 0').range( ), 'unspecif ied') | |
| 98 | test.e qual(ipadd r.IPv4.par se('0.1.0. 0').range( ), 'unspecif ied') | |
| 99 | test.equal (ipaddr.IP v4.parse(' IP ').range() , 'private') | |
| 100 | test.e qual(ipadd r.IPv4.par se('192.16 8.2.1').ra nge(), 'private' ) | |
| 101 | test.e qual(ipadd r.IPv4.par se('224.10 0.0.1').ra nge(), 'multicas t') | |
| 102 | test.e qual(ipadd r.IPv4.par se('169.25 4.15.0').r ange(), 'linkLoca l') | |
| 103 | test.e qual(ipadd r.IPv4.par se('127.1. 1.1').rang e(), 'loopback ') | |
| 104 | test.e qual(ipadd r.IPv4.par se('255.25 5.255.255' ).range(), 'broadcas t') | |
| 105 | test.e qual(ipadd r.IPv4.par se('240.1. 2.3').rang e(), 'reserved ') | |
| 106 | test.e qual(ipadd r.IPv4.par se('8.8.8. 8').range( ), 'unicast' ) | |
| 107 | test.d one() | |
| 108 | ||
| 109 | 'can con struct IPv 6 from par ts': (test ) -> | |
| 110 | test.d oesNotThro w -> | |
| 111 | new ipaddr.IPv 6([0x2001, 0xdb8, 0x f53a, 0, 0 , 0, 0, 1] ) | |
| 112 | test.d one() | |
| 113 | ||
| 114 | 'refuses to constr uct invali d IPv6': ( test) -> | |
| 115 | test.t hrows -> | |
| 116 | new ipaddr.IPv 6([0xfffff , 0, 0, 0, 0, 0, 0, 1]) | |
| 117 | test.t hrows -> | |
| 118 | new ipaddr.IPv 6([0xfffff , 0, 0, 0, 0, 0, 1]) | |
| 119 | test.d one() | |
| 120 | ||
| 121 | 'convert s IPv6 to string cor rectly': ( test) -> | |
| 122 | addr = new ipadd r.IPv6([0x 2001, 0xdb 8, 0xf53a, 0, 0, 0, 0, 1]) | |
| 123 | test.e qual(addr. toNormaliz edString() , '2001:db 8:f53a:0:0 :0:0:1') | |
| 124 | test.e qual(addr. toString() , '2001:db 8:f53a::1' ) | |
| 125 | test.e qual(new i paddr.IPv6 ([0, 0, 0, 0, 0, 0, 0, 1]).toS tring(), ' ::1') | |
| 126 | test.e qual(new i paddr.IPv6 ([0x2001, 0xdb8, 0, 0, 0, 0, 0 , 0]).toSt ring(), '2 001:db8::' ) | |
| 127 | test.d one() | |
| 128 | ||
| 129 | 'returns correct k ind for IP v6': (test ) -> | |
| 130 | addr = new ipadd r.IPv6([0x 2001, 0xdb 8, 0xf53a, 0, 0, 0, 0, 1]) | |
| 131 | test.e qual(addr. kind(), 'i pv6') | |
| 132 | test.d one() | |
| 133 | ||
| 134 | 'allows to access IPv6 addre ss parts': (test) -> | |
| 135 | addr = new ipadd r.IPv6([0x 2001, 0xdb 8, 0xf53a, 0, 0, 42, 0, 1]) | |
| 136 | test.e qual(addr. parts[5], 42) | |
| 137 | test.d one() | |
| 138 | ||
| 139 | 'checks IPv6 addre ss format' : (test) - > | |
| 140 | test.e qual(ipadd r.IPv6.isI Pv6('2001: db8:F53A:: 1'), t rue) | |
| 141 | test.e qual(ipadd r.IPv6.isI Pv6('20000 1::1'), t rue) | |
| 142 | test.e qual(ipadd r.IPv6.isI Pv6('::fff f:192.168. 1.1'), t rue) | |
| 143 | test.e qual(ipadd r.IPv6.isI Pv6('::fff f:300.168. 1.1'), t rue) | |
| 144 | test.e qual(ipadd r.IPv6.isI Pv6('::fff f:300.168. 1.1:0'), f alse) | |
| 145 | test.e qual(ipadd r.IPv6.isI Pv6('fe80: :wtf'), f alse) | |
| 146 | test.d one() | |
| 147 | ||
| 148 | 'validat es IPv6 ad dresses': (test) -> | |
| 149 | test.e qual(ipadd r.IPv6.isV alid('2001 :db8:F53A: :1'), true) | |
| 150 | test.e qual(ipadd r.IPv6.isV alid('2000 01::1'), false) | |
| 151 | test.e qual(ipadd r.IPv6.isV alid('::ff ff:192.168 .1.1'), true) | |
| 152 | test.e qual(ipadd r.IPv6.isV alid('::ff ff:300.168 .1.1'), false) | |
| 153 | test.e qual(ipadd r.IPv6.isV alid('::ff ff:300.168 .1.1:0'), false) | |
| 154 | test.e qual(ipadd r.IPv6.isV alid('2001 :db8::F53A ::1'), false) | |
| 155 | test.e qual(ipadd r.IPv6.isV alid('fe80 ::wtf'), false) | |
| 156 | test.e qual(ipadd r.IPv6.isV alid('2002 ::2:'), false) | |
| 157 | test.e qual(ipadd r.IPv6.isV alid(undef ined), false) | |
| 158 | test.d one() | |
| 159 | ||
| 160 | 'parses IPv6 in di fferent fo rmats': (t est) -> | |
| 161 | test.d eepEqual(i paddr.IPv6 .parse('20 01:db8:F53 A:0:0:0:0: 1').parts, [0x2001, 0xdb8, 0xf 53a, 0, 0, 0, 0, 1]) | |
| 162 | test.d eepEqual(i paddr.IPv6 .parse('fe 80::10').p arts, [0xf e80, 0, 0, 0, 0, 0, 0, 0x10]) | |
| 163 | test.d eepEqual(i paddr.IPv6 .parse('20 01:db8:F53 A::').part s, [0x2001 , 0xdb8, 0 xf53a, 0, 0, 0, 0, 0 ]) | |
| 164 | test.d eepEqual(i paddr.IPv6 .parse(':: 1').parts, [0, 0, 0, 0, 0, 0, 0, 1]) | |
| 165 | test.d eepEqual(i paddr.IPv6 .parse(':: ').parts, [0, 0, 0, 0, 0, 0, 0 , 0]) | |
| 166 | test.d one() | |
| 167 | ||
| 168 | 'barfs a t invalid IPv6': (te st) -> | |
| 169 | test.t hrows -> | |
| 170 | ipad dr.IPv6.pa rse('fe80: :0::1') | |
| 171 | test.d one() | |
| 172 | ||
| 173 | 'matches IPv6 CIDR correctly ': (test) -> | |
| 174 | addr = ipaddr.IP v6.parse(' 2001:db8:f 53a::1') | |
| 175 | test.e qual(addr. match(ipad dr.IPv6.pa rse('::'), 0), true) | |
| 176 | test.e qual(addr. match(ipad dr.IPv6.pa rse('2001: db8:f53a:: 1:1'), 64) , true) | |
| 177 | test.e qual(addr. match(ipad dr.IPv6.pa rse('2001: db8:f53b:: 1:1'), 48) , false) | |
| 178 | test.e qual(addr. match(ipad dr.IPv6.pa rse('2001: db8:f531:: 1:1'), 44) , true) | |
| 179 | test.e qual(addr. match(ipad dr.IPv6.pa rse('2001: db8:f500:: 1'), 40), true) | |
| 180 | test.e qual(addr. match(ipad dr.IPv6.pa rse('2001: db9:f500:: 1'), 40), false) | |
| 181 | test.e qual(addr. match(addr , 128), tr ue) | |
| 182 | test.d one() | |
| 183 | ||
| 184 | 'parses IPv6 CIDR correctly' : (test) - > | |
| 185 | addr = ipaddr.IP v6.parse(' 2001:db8:f 53a::1') | |
| 186 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR(': :/0')), true) | |
| 187 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 3a::1:1/64 ')), true) | |
| 188 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 3b::1:1/48 ')), false ) | |
| 189 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 31::1:1/44 ')), true) | |
| 190 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 00::1/40') ), true) | |
| 191 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR('2 001:db9:f5 00::1/40') ), false ) | |
| 192 | test.e qual(addr. match(ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 3a::1/128' )), true) | |
| 193 | test.t hrows -> | |
| 194 | ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 3a::1') | |
| 195 | test.t hrows -> | |
| 196 | ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 3a::1/-1') | |
| 197 | test.t hrows -> | |
| 198 | ipad dr.IPv6.pa rseCIDR('2 001:db8:f5 3a::1/129' ) | |
| 199 | test.d one() | |
| 200 | ||
| 201 | 'convert s between IPv4-mappe d IPv6 add resses and IPv4 addr esses': (t est) -> | |
| 202 | addr = ipaddr.IP v4.parse(' 77.88.21.1 1') | |
| 203 | mapped = addr.to IPv4Mapped Address() | |
| 204 | test.d eepEqual(m apped.part s, [0, 0, 0, 0, 0, 0 xffff, 0x4 d58, 0x150 b]) | |
| 205 | test.d eepEqual(m apped.toIP v4Address( ).octets, addr.octet s) | |
| 206 | test.d one() | |
| 207 | ||
| 208 | 'refuses to conver t non-IPv4 -mapped IP v6 address to IPv4 a ddress': ( test) -> | |
| 209 | test.t hrows -> | |
| 210 | ipad dr.IPv6.pa rse('2001: db8::1').t oIPv4Addre ss() | |
| 211 | test.d one() | |
| 212 | ||
| 213 | 'detects reserved IPv6 netwo rks': (tes t) -> | |
| 214 | test.e qual(ipadd r.IPv6.par se('::').r ange(), 'unspecif ied') | |
| 215 | test.e qual(ipadd r.IPv6.par se('fe80:: 1234:5678: abcd:0123' ).range(), 'linkLoca l') | |
| 216 | test.e qual(ipadd r.IPv6.par se('ff00:: 1234').ran ge(), 'multicas t') | |
| 217 | test.e qual(ipadd r.IPv6.par se('::1'). range(), 'loopback ') | |
| 218 | test.e qual(ipadd r.IPv6.par se('fc00:: ').range() , 'uniqueLo cal') | |
| 219 | test.e qual(ipadd r.IPv6.par se('::ffff :192.168.1 .10').rang e(), 'ipv4Mapp ed') | |
| 220 | test.e qual(ipadd r.IPv6.par se('::ffff :0:192.168 .1.10').ra nge(), 'rfc6145' ) | |
| 221 | test.e qual(ipadd r.IPv6.par se('64:ff9 b::1234'). range(), 'rfc6052' ) | |
| 222 | test.e qual(ipadd r.IPv6.par se('2002:1 f63:45e8:: 1').range( ), '6to4') | |
| 223 | test.e qual(ipadd r.IPv6.par se('2001:: 4242').ran ge(), 'teredo') | |
| 224 | test.e qual(ipadd r.IPv6.par se('2001:d b8::3210') .range(), 'reserved ') | |
| 225 | test.e qual(ipadd r.IPv6.par se('2001:4 70:8:66::1 ').range() , 'unicast' ) | |
| 226 | test.d one() | |
| 227 | ||
| 228 | 'is able to determ ine IP add ress type' : (test) - > | |
| 229 | test.e qual(ipadd r.parse('8 .8.8.8').k ind(), 'ip v4') | |
| 230 | test.e qual(ipadd r.parse('2 001:db8:33 12::1').ki nd(), 'ipv 6') | |
| 231 | test.d one() | |
| 232 | ||
| 233 | 'throws an error i f tried to parse an invalid ad dress': (t est) -> | |
| 234 | test.t hrows -> | |
| 235 | ipad dr.parse(' ::some.non sense') | |
| 236 | test.d one() | |
| 237 | ||
| 238 | 'correct ly process es IPv4-ma pped addre sses': (te st) -> | |
| 239 | test.e qual(ipadd r.process( '8.8.8.8') .kind(), ' ipv4') | |
| 240 | test.e qual(ipadd r.process( '2001:db8: 3312::1'). kind(), 'i pv6') | |
| 241 | test.e qual(ipadd r.process( '::ffff:19 2.168.1.1' ).kind(), 'ipv4') | |
| 242 | test.d one() | |
| 243 | ||
| 244 | 'correct ly convert s IPv6 and IPv4 addr esses to b yte arrays ': (test) -> | |
| 245 | test.d eepEqual(i paddr.pars e('1.2.3.4 ').toByteA rray(), | |
| 246 | [0x1, 0x2, 0x3, 0x4] ); | |
| 247 | # Fuck yeah. The first byt e of Googl e's IPv6 a ddress is 42. 42! | |
| 248 | test.d eepEqual(i paddr.pars e('2a00:14 50:8007::6 8').toByte Array(), | |
| 249 | [42, 0x00, 0x14, 0x5 0, 0x80, 0 x07, 0x00, 0x00, 0x0 0, 0x00, 0 x00, 0x00, 0x00, 0x0 0, 0x00, 0 x68 ]) | |
| 250 | test.d one() | |
| 251 | ||
| 252 | 'correct ly parses 1 as an IP v4 address ': (test) -> | |
| 253 | test.e qual(ipadd r.IPv6.isV alid('1'), false) | |
| 254 | test.e qual(ipadd r.IPv4.isV alid('1'), true) | |
| 255 | test.d eepEqual(n ew ipaddr. IPv4([0, 0 , 0, 1]), ipaddr.par se('1')) | |
| 256 | test.d one() | |
| 257 | ||
| 258 | 'correct ly detects IPv4 and IPv6 CIDR addresses' : (test) - > | |
| 259 | test.d eepEqual([ ipaddr.IPv 6.parse('f c00::'), 6 4], | |
| 260 | i paddr.pars eCIDR('fc0 0::/64')) | |
| 261 | test.d eepEqual([ ipaddr.IPv 4.parse('1 .2.3.4'), 5], | |
| 262 | i paddr.pars eCIDR('1.2 .3.4/5')) | |
| 263 | test.d one() | |
| 264 | ||
| 265 | 'does no t consider a very la rge or ver y small nu mber a val id IP addr ess': (tes t) -> | |
| 266 | test.equal (ipaddr.is Valid('4 PORTPORT 9'), false ) | |
| 267 | test.e qual(ipadd r.isValid( '-1'), fal se) | |
| 268 | test.d one() | |
| 269 | ||
| 270 | 'does no t hang on ::8:8:8:8: 8:8:8:8:8' : (test) - > | |
| 271 | test.e qual(ipadd r.IPv6.isV alid('::8: 8:8:8:8:8: 8:8:8'), f alse) | |
| 272 | test.d one() | |
| 273 | ||
| 274 | 'subnetM atch does not fail o n empty ra nge': (tes t) -> | |
| 275 | ipaddr .subnetMat ch(new ipa ddr.IPv4([ 1,2,3,4]), {}, false ) | |
| 276 | ipaddr .subnetMat ch(new ipa ddr.IPv4([ 1,2,3,4]), {subnet: []}, false ) | |
| 277 | test.d one() | |
| 278 | ||
| 279 | 'subnetM atch retur ns default subnet on empty ran ge': (test ) -> | |
| 280 | test.e qual(ipadd r.subnetMa tch(new ip addr.IPv4( [1,2,3,4]) , {}, fals e), false) | |
| 281 | test.e qual(ipadd r.subnetMa tch(new ip addr.IPv4( [1,2,3,4]) , {subnet: []}, fals e), false) | |
| 282 | test.d one() |
Araxis Merge (but not the data content of this report) is Copyright © 1993-2016 Araxis Ltd (www.araxis.com). All rights reserved.