[Mono-list] System.Collections.BitArray (and testcase!)

David Menestrina dmenest@yahoo.com
Tue, 17 Jul 2001 23:45:58 -0700 (PDT)


--0-1475360259-995438758=:83393
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Assembly:
  corlib/System.Collections

ChangeLog @ mcs/class/corlib/System.Collections
  2001-07-16  David Menestrina <dmenest@yahoo.com>
         * BitArray.cs: Add
         * BitArrayTest.cs: Add



__________________________________________________
Do You Yahoo!?
Get personalized email addresses from Yahoo! Mail
http://personal.mail.yahoo.com/
--0-1475360259-995438758=:83393
Content-Type: application/x-unknown; name="BitArray.cs"
Content-Transfer-Encoding: base64
Content-Description: BitArray.cs
Content-Disposition: attachment; filename="BitArray.cs"

dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIFN5c3RlbS5Db2xsZWN0aW9ucwp7
CiAgLy8gZG8gd2UgcmVhbGx5IG5lZWQgdG8gc3BlY2lmeSBJRW51bWVyYWJs
ZSBzaW5jZSBJQ29sbGVjdGlvbiBleHRlbmRzIGl0PwogIHB1YmxpYyBjbGFz
cyBCaXRBcnJheSA6IElDb2xsZWN0aW9uLCBJRW51bWVyYWJsZSwgSUNsb25l
YWJsZQogIHsKICAgIHByaXZhdGUgSW50MzJbXSBtX2FycmF5OwogICAgcHJp
dmF0ZSBpbnQgbV9sZW5ndGg7CiAgICBwcml2YXRlIGludCBtX21vZENvdW50
ID0gMDsKICAgIAogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjbGVhckp1bmso
SW50MzJbXSBhcnIsIGludCBudW1iaXRzKQogICAgewogICAgICBpbnQgbnVt
anVua2JpdHMgPSAzMiAtIChudW1iaXRzJTMyKTsKICAgICAgVUludDMyIG1h
c2sgPSAofjBVID4+IG51bWp1bmtiaXRzKTsKICAgICAgYXJyW2Fyci5MZW5n
dGggLSAxXSAmPSAoaW50KW1hc2s7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0
aWMgaW50IGJpdHNUb0ludHMoaW50IGJpdHMpCiAgICB7CiAgICAgIGludCBy
ZXR2YWwgPSBiaXRzLzMyOwogICAgICBpZiAoYml0cyAlIDMyICE9IDApCgly
ZXR2YWwrKzsKCiAgICAgIHJldHVybiByZXR2YWw7CiAgICB9CgogICAgcHJp
dmF0ZSBzdGF0aWMgaW50IGJpdHNUb0J5dGVzKGludCBiaXRzKQogICAgewog
ICAgICBpbnQgcmV0dmFsID0gYml0cy84OwogICAgICBpZiAoYml0cyAlIDgg
IT0gMCkKCXJldHZhbCsrOwoKICAgICAgcmV0dXJuIHJldHZhbDsKICAgIH0K
CgogICAgcHJpdmF0ZSB2b2lkIHNldEJpdChpbnQgYml0SW5kZXgsIGJvb2wg
dmFsdWUpCiAgICB7CiAgICAgIGludCBpbmRleCA9IGJpdEluZGV4LzMyOwog
ICAgICBpbnQgc2hpZnQgPSBiaXRJbmRleCUzMjsKCiAgICAgIEludDMyIHRo
ZUJpdCA9IDEgPDwgc2hpZnQ7CgogICAgICBpZih2YWx1ZSkKCW1fYXJyYXlb
aW5kZXhdIHw9IHRoZUJpdDsKICAgICAgZWxzZQoJbV9hcnJheVtpbmRleF0g
Jj0gfnRoZUJpdDsKICAgICAgCiAgICAgIG1fbW9kQ291bnQrKzsKICAgIH0K
CiAgICBwcml2YXRlIGJvb2wgZ2V0Qml0KGludCBiaXRJbmRleCkKICAgIHsK
ICAgICAgaW50IGluZGV4ID0gYml0SW5kZXgvMzI7CiAgICAgIGludCBzaGlm
dCA9IGJpdEluZGV4JTMyOwoKICAgICAgSW50MzIgdGhlQml0ID0gbV9hcnJh
eVtpbmRleF0gJiAoMSA8PCBzaGlmdCk7CgogICAgICByZXR1cm4gKHRoZUJp
dCA9PSAwKSA/IGZhbHNlIDogdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGJ5
dGUgZ2V0Qnl0ZShpbnQgYnl0ZUluZGV4KQogICAgewogICAgICBpbnQgaW5k
ZXggPSBieXRlSW5kZXgvNDsKICAgICAgaW50IHNoaWZ0ID0gKGJ5dGVJbmRl
eCU0KSo4OwoKICAgICAgSW50MzIgdGhlQnl0ZSA9IG1fYXJyYXlbaW5kZXhd
ICYgKDB4ZmYgPDwgc2hpZnQpOwoKICAgICAgcmV0dXJuIChieXRlKSgodGhl
Qnl0ZSA+PiBzaGlmdCkmMHhmZik7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lk
IHNldEJ5dGUoaW50IGJ5dGVJbmRleCwgYnl0ZSB2YWx1ZSkKICAgIHsKICAg
ICAgaW50IGluZGV4ID0gYnl0ZUluZGV4LzQ7CiAgICAgIGludCBzaGlmdCA9
IChieXRlSW5kZXglNCkqODsKCiAgICAgIEludDMyIG9yaWcgPSBtX2FycmF5
W2luZGV4XTsKCiAgICAgIC8vIGNsZWFyIHRoZSBieXRlCiAgICAgIG9yaWcg
Jj0gfigweGZmIDw8IHNoaWZ0KTsKICAgICAgLy8gb3IgaW4gdGhlIG5ldyBi
eXRlCiAgICAgIG9yaWcgfD0gdmFsdWUgPDwgc2hpZnQ7CiAgICAgIAogICAg
ICBtX2FycmF5W2luZGV4XSA9IG9yaWc7CgogICAgICBtX21vZENvdW50Kys7
CiAgICB9CgogICAgLyogLS0tIENvbnN0cnVjdG9ycyAtLS0gKi8KICAgIHB1
YmxpYyBCaXRBcnJheShCaXRBcnJheSBvcmlnKQogICAgewogICAgICBtX2xl
bmd0aCA9IG9yaWcubV9sZW5ndGg7CiAgICAgIAogICAgICBpbnQgbnVtSW50
cyA9IGJpdHNUb0ludHMobV9sZW5ndGgpOwogICAgICBtX2FycmF5ID0gbmV3
IEludDMyW251bUludHNdOwogICAgICBBcnJheS5Db3B5KG9yaWcubV9hcnJh
eSwgbV9hcnJheSwgbnVtSW50cyk7CiAgICB9CgogICAgcHVibGljIEJpdEFy
cmF5KGJvb2xbXSBiaXRzKQogICAgewogICAgICBtX2xlbmd0aCA9IGJpdHMu
TGVuZ3RoOwoKICAgICAgaW50IG51bUludHMgPSBiaXRzVG9JbnRzKG1fbGVu
Z3RoKTsKICAgICAgbV9hcnJheSA9IG5ldyBJbnQzMltudW1JbnRzXTsKICAg
ICAgZm9yIChpbnQgaT0wOyBpIDwgYml0cy5MZW5ndGg7IGkrKykKCXNldEJp
dChpLCBiaXRzW2ldKTsKICAgIH0KCiAgICBwdWJsaWMgQml0QXJyYXkoYnl0
ZVtdIGJ5dGVzKQogICAgewogICAgICBtX2xlbmd0aCA9IGJ5dGVzLkxlbmd0
aCAqIDg7CgogICAgICBtX2FycmF5ID0gbmV3IEludDMyW2JpdHNUb0ludHMo
bV9sZW5ndGgpXTsKICAgICAgZm9yIChpbnQgaT0wOyBpIDwgYnl0ZXMuTGVu
Z3RoOyBpKyspCglzZXRCeXRlKGksIGJ5dGVzW2ldKTsKICAgIH0KCiAgICBw
dWJsaWMgQml0QXJyYXkoaW50IGNhcGFjaXR5KQogICAgewogICAgICBtX2xl
bmd0aCA9IGNhcGFjaXR5OwogICAgICBtX2FycmF5ID0gbmV3IEludDMyW2Jp
dHNUb0ludHMobV9sZW5ndGgpXTsKICAgIH0KICAgIAogICAgcHVibGljIEJp
dEFycmF5KGludFtdIHdvcmRzKQogICAgewogICAgICBpbnQgYXJybGVuID0g
d29yZHMuTGVuZ3RoOwogICAgICBtX2xlbmd0aCA9IGFycmxlbiozMjsKICAg
ICAgbV9hcnJheSA9IG5ldyBJbnQzMlthcnJsZW5dOwogICAgICBBcnJheS5D
b3B5KHdvcmRzLCBtX2FycmF5LCBhcnJsZW4pOwogICAgfQogICAgCiAgICBw
dWJsaWMgQml0QXJyYXkoaW50IGNhcGFjaXR5LCBib29sIHZhbHVlKSA6IHRo
aXMoY2FwYWNpdHkpCiAgICB7CiAgICAgIGlmICh2YWx1ZSkKICAgICAgewoJ
Ly8gRklYTUU6ICBNYXliZSB5b3UgY2FuIGNyZWF0ZSBhbiBhcnJheSBwcmUg
ZmlsbGVkPwoJZm9yIChpbnQgaSA9IDA7IGkgPCBtX2FycmF5Lkxlbmd0aDsg
aSsrKQoJICBtX2FycmF5W2ldID0gfjA7CiAgICAgIH0KICAgIH0KCiAgICBw
cml2YXRlIEJpdEFycmF5KEludDMyIFtdIGFycmF5LCBpbnQgbGVuZ3RoKQog
ICAgewogICAgICBtX2FycmF5ID0gYXJyYXk7CiAgICAgIG1fbGVuZ3RoID0g
bGVuZ3RoOwogICAgfQogICAgCgogICAgLyogLS0tIFB1YmxpYyBwcm9wZXJ0
aWVzIC0tLSAqLwogICAgcHVibGljIHZpcnR1YWwgaW50IENvdW50CiAgICB7
CiAgICAgIGdldAogICAgICB7CglyZXR1cm4gbV9sZW5ndGg7CiAgICAgIH0K
ICAgIH0KCiAgICBwdWJsaWMgdmlydHVhbCBib29sIElzUmVhZE9ubHkKICAg
IHsKICAgICAgZ2V0CiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQog
ICAgfQoKICAgIHB1YmxpYyB2aXJ0dWFsIGJvb2wgSXNTeW5jaHJvbml6ZWQK
ICAgIHsKICAgICAgZ2V0CiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAg
fQogICAgfQoKICAgIHB1YmxpYyB2aXJ0dWFsIGJvb2wgdGhpc1tpbnQgaW5k
ZXhdCiAgICB7CiAgICAgIGdldAogICAgICB7CiAgICAgICAgcmV0dXJuIEdl
dChpbmRleCk7CiAgICAgIH0KICAgICAgc2V0CiAgICAgIHsKICAgICAgICBT
ZXQoaW5kZXgsIHZhbHVlKTsKICAgICAgfQoKICAgIH0KCiAgICBwdWJsaWMg
dmlydHVhbCBpbnQgTGVuZ3RoCiAgICB7CiAgICAgIGdldAogICAgICB7Cgly
ZXR1cm4gbV9sZW5ndGg7CiAgICAgIH0KICAgICAgc2V0CiAgICAgIHsKCWlm
ICh2YWx1ZSA8IDApCgkgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VF
eGNlcHRpb24oKTsKCglpbnQgbmV3TGVuID0gdmFsdWU7CglpZiAobV9sZW5n
dGggIT0gbmV3TGVuKQoJewoJICBpbnQgbnVtaW50cyA9IGJpdHNUb0ludHMo
bmV3TGVuKTsKCSAgSW50MzIgW10gbmV3QXJyID0gbmV3IEludDMyW251bWlu
dHNdOwoJICBpbnQgY29weWxlbiA9IChudW1pbnRzID4gbV9hcnJheS5MZW5n
dGggPyBtX2FycmF5Lkxlbmd0aCA6IG51bWludHMpOwoJICBBcnJheS5Db3B5
KG1fYXJyYXksIG5ld0FyciwgY29weWxlbik7CgkgIAoJICAvLyBjbGVhciBv
dXQgdGhlIGp1bmsgYml0cyBhdCB0aGUgZW5kOgoJICBjbGVhckp1bmsobmV3
QXJyLCBuZXdMZW4pOwoKCSAgLy8gc2V0IHRoZSBpbnRlcm5hbCBzdGF0ZQoJ
ICBtX2FycmF5ID0gbmV3QXJyOwoJICBtX2xlbmd0aCA9IG5ld0xlbjsKCSAg
bV9tb2RDb3VudCsrOwoJfQogICAgICB9CiAgICB9CgogICAgcHVibGljIHZp
cnR1YWwgb2JqZWN0IFN5bmNSb290CiAgICB7CiAgICAgIGdldAogICAgICB7
CglyZXR1cm4gdGhpczsKICAgICAgfQogICAgfQoKICAgIC8qIC0tLSBQdWJs
aWMgbWV0aG9kcyAtLS0gKi8KICAgIHB1YmxpYyBCaXRBcnJheSBBbmQoQml0
QXJyYXkgb3BlcmFuZCkKICAgIHsKICAgICAgaWYgKG9wZXJhbmQgPT0gbnVs
bCkKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKCk7
CiAgICAgIGlmIChvcGVyYW5kLm1fbGVuZ3RoICE9IG1fbGVuZ3RoKQogICAg
ICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigpOwogICAgICAKICAg
ICAgSW50MzIgW10gbmV3YXJyID0gbmV3IEludDMyW21fYXJyYXkuTGVuZ3Ro
XTsKICAgICAgZm9yIChpbnQgaT0wOyBpIDwgbV9hcnJheS5MZW5ndGg7IGkr
KykKICAgICAgICBuZXdhcnJbaV0gPSBtX2FycmF5W2ldICYgb3BlcmFuZC5t
X2FycmF5W2ldOwoKICAgICAgcmV0dXJuIG5ldyBCaXRBcnJheShuZXdhcnIs
IG1fbGVuZ3RoKTsKICAgIH0KCiAgICBwdWJsaWMgb2JqZWN0IENsb25lKCkK
ICAgIHsKICAgICAgLy8gRklYTUU6IGFjY29yZGluZyB0byB0aGUgZG9jLCB0
aGlzIHNob3VsZCBiZSBhIHNoYWxsb3cgY29weS4KICAgICAgLy8gQnV0IHRo
ZSBNUyBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byBkbyBhIGRlZXAgY29weS4K
ICAgICAgcmV0dXJuIG5ldyBCaXRBcnJheSgoSW50MzIgW10pbV9hcnJheS5D
bG9uZSgpLCBtX2xlbmd0aCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyB2b2lk
IENvcHlUbyhBcnJheSBhcnJheSwgaW50IGluZGV4KQogICAgewogICAgICBp
ZiAoYXJyYXkgPT0gbnVsbCkKCXRocm93IG5ldyBBcmd1bWVudE51bGxFeGNl
cHRpb24oKTsKICAgICAgaWYgKGluZGV4IDwgMCkKCXRocm93IG5ldyBBcmd1
bWVudE91dE9mUmFuZ2VFeGNlcHRpb24oKTsKICAgICAgCiAgICAgIC8vIEZJ
WE1FOiBUaHJvdyBBcmd1bWVudEV4Y2VwdGlvbiBpZiBhcnJheSBpcyBtdWx0
aWRpbWVuc2lvbmFsCiAgICAgIGlmIChpbmRleCA+PSBhcnJheS5MZW5ndGgp
Cgl0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oKTsKCiAgICAgIC8vIGlu
IGVhY2ggY2FzZSwgY2hlY2sgdG8gbWFrZSBzdXJlIGVub3VnaCBzcGFjZSBp
biBhcnJheQoKICAgICAgaWYgKGFycmF5IGlzIGJvb2xbXSkKICAgICAgewoJ
aWYgKGluZGV4ICsgbV9sZW5ndGggPj0gYXJyYXkuTGVuZ3RoKQoJICB0aHJv
dyBuZXcgQXJndW1lbnRFeGNlcHRpb24oKTsKCglib29sIFtdIGJhcnJheSA9
IChib29sIFtdKSBhcnJheTsKCgkvLyBDb3B5IHRoZSBiaXRzIGludG8gdGhl
IGFycmF5Cglmb3IgKGludCBpID0gMDsgaSA8IG1fbGVuZ3RoOyBpKyspCgkg
IGJhcnJheVtpbmRleCArIGldID0gZ2V0Qml0KGkpOwogICAgICB9CiAgICAg
IGVsc2UgaWYgKGFycmF5IGlzIGJ5dGVbXSkKICAgICAgewoJaW50IG51bWJ5
dGVzID0gYml0c1RvQnl0ZXMobV9sZW5ndGgpOwoJaWYgKGluZGV4ICsgbnVt
Ynl0ZXMgPj0gYXJyYXkuTGVuZ3RoKQoJICB0aHJvdyBuZXcgQXJndW1lbnRF
eGNlcHRpb24oKTsKCglieXRlIFtdIGJhcnJheSA9IChieXRlIFtdKSBhcnJh
eTsKCS8vIENvcHkgdGhlIGJ5dGVzIGludG8gdGhlIGFycmF5Cglmb3IgKGlu
dCBpID0gMDsgaSA8IG51bWJ5dGVzOyBpKyspCgkgIGJhcnJheVtpbmRleCAr
IGldID0gZ2V0Qnl0ZShpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChhcnJh
eSBpcyBpbnRbXSkKICAgICAgewoJaW50IG51bWludHMgPSBiaXRzVG9JbnRz
KG1fbGVuZ3RoKTsKCWlmIChpbmRleCArIG51bWludHMgPj0gYXJyYXkuTGVu
Z3RoKQoJICB0aHJvdyBuZXcgQXJndW1lbnRFeGNlcHRpb24oKTsKCUFycmF5
LkNvcHkobV9hcnJheSwgMCwgYXJyYXksIGluZGV4LCBudW1pbnRzKTsKICAg
ICAgfQogICAgICBlbHNlCiAgICAgIHsKCXRocm93IG5ldyBJbnZhbGlkQ2Fz
dEV4Y2VwdGlvbigpOwogICAgICB9CiAgICB9CgogICAgICAKICAgIC8qCiAg
ICAgKiBBbGwgdGhpcyBjb2RlIGZvciBub3RoaW5nLi4uIEFwcGFyZW50bHks
IFRoZSBNUyBCaXRBcnJheSBkb2Vzbid0CiAgICAgKiBvdmVycmlkZSBFcXVh
bHMhCiAgICAgKnB1YmxpYyBvdmVycmlkZSBib29sIEVxdWFscyhvYmplY3Qg
b2JqKQogICAgewogICAgICAvLyBJZiBpdCdzIG5vdCBhIEJpdEFycmF5LCB0
aGVuIGl0IGNhbid0IGJlIGVxdWFsIHRvIHVzLgogICAgICBpZiAoIShvYmog
aXMgQml0QXJyYXkpKQoJcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gSWYgdGhl
IHJlZmVyZW5jZXMgYXJlIGVxdWFsLCB0aGVuIGNsZWFybHkgdGhlIGluc3Rh
bmNlcyBhcmUgZXF1YWwKICAgICAgaWYgKHRoaXMgPT0gb2JqKQoJcmV0dXJu
IHRydWU7CgogICAgICAvLyBJZiBpdHMgbGVuZ3RoIGlzIGRpZmZlcmVudCwg
dGhhbiBpdCBjYW4ndCBiZSBlcXVhbC4KICAgICAgQml0QXJyYXkgYiA9IChC
aXRBcnJheSkgb2JqOwogICAgICBpZiAobV9sZW5ndGggIT0gYi5tX2xlbmd0
aCkKCXJldHVybiBmYWxzZTsKCgogICAgICAvLyBOb3cgY29tcGFyZSB0aGUg
Yml0cy4KICAgICAgLy8gVGhpcyBpcyBhIGxpdHRsZSB0cmlja3ksIGJlY2F1
c2UgaWYgbGVuZ3RoIGRvZXNuJ3QgZGl2aWRlIDMyLAogICAgICAvLyB0aGVu
IHdlIHNob3VsZG4ndCBjb21wYXJlIHRoZSB1bnVzZWQgYml0cyBpbiB0aGUg
bGFzdCBlbGVtZW50IAogICAgICAvLyBvZiBtX2FycmF5LgoKICAgICAgLy8g
Q29tcGFyZSBhbGwgZnVsbCBpbnRzLiAgSWYgYW55IGRpZmZlciwgdGhlbiB3
ZSBhcmUgbm90IGVxdWFsLgogICAgICBpbnQgbnVtaW50cyA9IG1fbGVuZ3Ro
LzMyOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWludHM7IGkrKykK
ICAgICAgewoJaWYgKGIubV9hcnJheVtpXSAhPSBtX2FycmF5W2ldKQoJICBy
ZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC8vIENvbXBhcmUg
dGhlIGxlZnQgb3ZlciBiaXRzIChpZiBhbnkpCiAgICAgIGludCBleHRyYWJp
dHMgPSBtX2xlbmd0aCUzMjsKICAgICAgaWYgKGV4dHJhYml0cyAhPSAwKQog
ICAgICB7CgkvLyBvdXIgbWFzayBpcyB0aGUgImV4dHJhYml0cyIgbGVhc3Qg
c2lnbmlmaWNhbnQgYml0cyBzZXQgdG8gMS4KCVVJbnQzMiBjb21wYXJlbWFz
ayA9IH4wVSA+PiAoMzIgLSBleHRyYWJpdHMpOwoKCS8vIG51bWludHMgaXMg
cm91bmRlZCBkb3duLCBzbyBpdCdzIHNhZmUgdG8gdXNlIGFzIGFuIGluZGV4
IGhlcmUsCgkvLyBhcyBsb25nIGFzIGV4dHJhYml0cyA+IDAuCglpZiAoKGIu
bV9hcnJheVtudW1pbnRzXSAmIGNvbXBhcmVtYXNrKSAKCSAgICAhPSAobV9h
cnJheVtudW1pbnRzXSAmIGNvbXBhcmVtYXNrKSkKCSAgcmV0dXJuIGZhbHNl
OwogICAgICB9CiAgICAgIAogICAgICAvLyBXZSBwYXNzZWQgdGhyb3VnaCBh
bGwgdGhlIGFib3ZlLCBzbyB3ZSBhcmUgZXF1YWwuCiAgICAgIHJldHVybiB0
cnVlOwoKICAgIH0KICAgICogIEVuZCBjb21tZW50IG91dCBvZiBFcXVhbHMo
KQogICAgKi8KCiAgICBwdWJsaWMgYm9vbCBHZXQoaW50IGluZGV4KQogICAg
ewogICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG1fbGVuZ3RoKQog
ICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFeGNlcHRpb24o
KTsKICAgICAgcmV0dXJuIGdldEJpdChpbmRleCk7CiAgICB9CgogICAgcHVi
bGljIElFbnVtZXJhdG9yIEdldEVudW1lcmF0b3IoKQogICAgeyAgICAgIAog
ICAgICByZXR1cm4gbmV3IEJpdEFycmF5RW51bWVyYXRvcih0aGlzKTsKICAg
IH0KCiAgICAvKgogICAgICogIFNpbmNlIE1TIGRvZXNuJ3QgYXBwZWFyIHRv
IG92ZXJyaWRlIEVxdWFscy9HZXRIYXNoQ29kZSwgd2UgZG9uJ3QuCiAgICAg
KnB1YmxpYyBvdmVycmlkZSBpbnQgR2V0SGFzaENvZGUoKQogICAgewogICAg
ICAvLyBXZSBjb3VsZCBtYWtlIHRoaXMgYSBjb25zdGFudCB0aW1lIGZ1bmN0
aW9uIAogICAgICAvLyBieSBqdXN0IHBpY2tpbmcgYSBjb25zdGFudCBudW1i
ZXIgb2YgYml0cywgc3ByZWFkIG91dAogICAgICAvLyBldmVubHkgYWNyb3Nz
IHRoZSBlbnRpcmUgYXJyYXkuICBGb3Igbm93LCB0aGlzIHdpbGwgc3VmZmlj
ZS4KCiAgICAgIGludCByZXR2YWwgPSBtX2xlbmd0aDsKCiAgICAgIC8vIEFk
ZCBpbiBlYWNoIGFycmF5IGVsZW1lbnQsIGV4Y2VwdCBmb3IgdGhlIGxlZnRv
dmVyIGJpdHMuCiAgICAgIGludCBudW1pbnRzID0gbV9sZW5ndGgvMzI7CiAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtaW50czsgaSsrKQoJcmV0dmFs
ICs9IChpbnQpbV9hcnJheVtpXTsKCiAgICAgIC8vIFRoYXQncyBlbm91Z2gu
ICBBZGRpbmcgaW4gdGhlIGxlZnRvdmVyIGJpdHMgaXMgdGlyaW5nLgoKICAg
ICAgcmV0dXJuIHJldHZhbDsKICAgIH0KICAgICogRW5kIGNvbW1lbnQgb3V0
IG9mIEdldEhhc2hDb2RlKCkKICAgICovCgogICAgcHVibGljIEJpdEFycmF5
IE5vdCgpCiAgICB7CiAgICAgIEludDMyIFtdIG5ld2FyciA9IG5ldyBJbnQz
MlttX2FycmF5Lkxlbmd0aF07CiAgICAgIGZvciAoaW50IGk9MDsgaSA8IG1f
YXJyYXkuTGVuZ3RoOyBpKyspCiAgICAgICAgbmV3YXJyW2ldID0gfm1fYXJy
YXlbaV07CgogICAgICByZXR1cm4gbmV3IEJpdEFycmF5KG5ld2FyciwgbV9s
ZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyBCaXRBcnJheSBPcihCaXRBcnJh
eSBvcGVyYW5kKQogICAgewogICAgICBpZiAob3BlcmFuZCA9PSBudWxsKQog
ICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24oKTsKICAg
ICAgaWYgKG9wZXJhbmQubV9sZW5ndGggIT0gbV9sZW5ndGgpCiAgICAgICAg
dGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCk7CiAgICAgIAogICAgICBJ
bnQzMiBbXSBuZXdhcnIgPSBuZXcgSW50MzJbbV9hcnJheS5MZW5ndGhdOwog
ICAgICBmb3IgKGludCBpPTA7IGkgPCBtX2FycmF5Lkxlbmd0aDsgaSsrKQog
ICAgICAgIG5ld2FycltpXSA9IG1fYXJyYXlbaV0gfCBvcGVyYW5kLm1fYXJy
YXlbaV07CgogICAgICByZXR1cm4gbmV3IEJpdEFycmF5KG5ld2FyciwgbV9s
ZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIFNldChpbnQgaW5kZXgs
IGJvb2wgdmFsdWUpCiAgICB7CiAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5k
ZXggPj0gbV9sZW5ndGgpCiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50T3V0
T2ZSYW5nZUV4Y2VwdGlvbigpOwogICAgICBzZXRCaXQoaW5kZXgsIHZhbHVl
KTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBTZXRBbGwoYm9vbCB2YWx1ZSkK
ICAgIHsKICAgICAgaWYgKHZhbHVlKQogICAgICB7Cglmb3IgKGludCBpID0g
MDsgaSA8IG1fYXJyYXkuTGVuZ3RoOyBpKyspCgkgIG1fYXJyYXlbaV0gPSB+
MDsKCQoJLy8gY2xlYXIgb3V0IHRoZSBqdW5rIGJpdHMgdGhhdCB3ZSBtaWdo
dCBoYXZlIHNldAoJY2xlYXJKdW5rKG1fYXJyYXksIG1fbGVuZ3RoKTsKICAg
ICAgfQogICAgICBlbHNlCglBcnJheS5DbGVhcihtX2FycmF5LCAwLCBtX2Fy
cmF5Lkxlbmd0aCk7CgoKICAgICAgbV9tb2RDb3VudCsrOwogICAgfQogICAg
CiAgICBwdWJsaWMgQml0QXJyYXkgWG9yKEJpdEFycmF5IG9wZXJhbmQpCiAg
ICB7CiAgICAgIGlmIChvcGVyYW5kID09IG51bGwpCiAgICAgICAgdGhyb3cg
bmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbigpOwogICAgICBpZiAob3BlcmFu
ZC5tX2xlbmd0aCAhPSBtX2xlbmd0aCkKICAgICAgICB0aHJvdyBuZXcgQXJn
dW1lbnRFeGNlcHRpb24oKTsKICAgICAgCiAgICAgIEludDMyIFtdIG5ld2Fy
ciA9IG5ldyBJbnQzMlttX2FycmF5Lkxlbmd0aF07CiAgICAgIGZvciAoaW50
IGk9MDsgaSA8IG1fYXJyYXkuTGVuZ3RoOyBpKyspCiAgICAgICAgbmV3YXJy
W2ldID0gbV9hcnJheVtpXSBeIG9wZXJhbmQubV9hcnJheVtpXTsKCiAgICAg
IHJldHVybiBuZXcgQml0QXJyYXkobmV3YXJyLCBtX2xlbmd0aCk7CiAgICB9
CgogICAgfkJpdEFycmF5KCkKICAgIHsKICAgIH0KICAgIAogICAgY2xhc3Mg
Qml0QXJyYXlFbnVtZXJhdG9yIDogSUVudW1lcmF0b3IKICAgIHsKICAgICAg
Qml0QXJyYXkgbV9iaXRBcnJheTsKICAgICAgcHJpdmF0ZSBib29sIG1fY3Vy
cmVudDsKICAgICAgcHJpdmF0ZSBpbnQgbV9pbmRleDsKICAgICAgcHJpdmF0
ZSBpbnQgbV9tYXg7CiAgICAgIHByaXZhdGUgaW50IG1fbW9kQ291bnQ7CiAg
ICAgCiAgICAgIHB1YmxpYyBCaXRBcnJheUVudW1lcmF0b3IoQml0QXJyYXkg
YmEpCiAgICAgIHsKCW1faW5kZXggPSAtMTsKCW1fYml0QXJyYXkgPSBiYTsK
CW1fbWF4ID0gYmEubV9sZW5ndGg7CgltX21vZENvdW50ID0gYmEubV9tb2RD
b3VudDsKICAgICAgfQogICAgICAKICAgICAgcHVibGljIG9iamVjdCBDdXJy
ZW50CiAgICAgIHsKCWdldAoJewoJICBpZiAobV9pbmRleCA8IDAgfHwgbV9p
bmRleCA+PSBtX21heCkKCSAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlv
bkV4Y2VwdGlvbigpOwoJICByZXR1cm4gbV9jdXJyZW50OwoJfQogICAgICB9
CiAgICAgIAogICAgICBwdWJsaWMgYm9vbCBNb3ZlTmV4dCgpCiAgICAgIHsK
CWlmIChtX21vZENvdW50ICE9IG1fYml0QXJyYXkubV9tb2RDb3VudCkKCSAg
dGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oKTsKCQoJaWYg
KG1faW5kZXggKyAxID49IG1fbWF4KQoJICByZXR1cm4gZmFsc2U7CgoJbV9p
bmRleCsrOwoJbV9jdXJyZW50ID0gbV9iaXRBcnJheVttX2luZGV4XTsKCXJl
dHVybiB0cnVlOwogICAgICB9CiAgICAgIAogICAgICBwdWJsaWMgdm9pZCBS
ZXNldCgpCiAgICAgIHsKCWlmIChtX21vZENvdW50ICE9IG1fYml0QXJyYXku
bV9tb2RDb3VudCkKCSAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNl
cHRpb24oKTsKCW1faW5kZXggPSAtMTsKICAgICAgfQogICAgfQogIH0KfQoK
CgoKCg==

--0-1475360259-995438758=:83393
Content-Type: application/x-unknown; name="BitArrayTest.cs"
Content-Transfer-Encoding: base64
Content-Description: BitArrayTest.cs
Content-Disposition: attachment; filename="BitArrayTest.cs"

Ly8NCi8vIEJpdEFycmF5VGVzdC5jcyAtIE5Vbml0IFRlc3QgQ2FzZXMgZm9y
IHRoZSBTeXN0ZW0uQ29sbGVjdGlvbnMuQml0QXJyYXkgY2xhc3MNCi8vIA0K
Ly8gQXV0aG9yOiBEYXZpZCBNZW5lc3RyaW5hIChkbWVuZXN0QHlhaG9vLmNv
bSkNCi8vDQoNCnVzaW5nIE5Vbml0LkZyYW1ld29yazsNCnVzaW5nIFN5c3Rl
bS5Db2xsZWN0aW9uczsNCnVzaW5nIFN5c3RlbTsNCg0KcHVibGljIGNsYXNz
IEJpdEFycmF5VGVzdCA6IFRlc3RDYXNlIA0Kew0KICBwcml2YXRlIEJpdEFy
cmF5IHRlc3RCYTsNCiAgcHJpdmF0ZSBib29sIFtdIHRlc3RQYXR0ZXJuOw0K
ICBwcml2YXRlIEJpdEFycmF5IG9wMTsNCiAgcHJpdmF0ZSBCaXRBcnJheSBv
cDI7DQoNCiAgcHJpdmF0ZSB2b2lkIHZlcmlmeVBhdHRlcm4oQml0QXJyYXkg
YmEsIGJvb2xbXSBwYXR0ZXJuKQ0KICB7DQogICAgQXNzZXJ0RXF1YWxzKGJh
Lkxlbmd0aCwgcGF0dGVybi5MZW5ndGgpOw0KICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcGF0dGVybi5MZW5ndGg7IGkrKykNCiAgICAgIEFzc2VydEVxdWFs
cyhiYVtpXSwgcGF0dGVybltpXSk7DQogIH0NCg0KICBwdWJsaWMgQml0QXJy
YXlUZXN0KCBzdHJpbmcgbmFtZSApIDogYmFzZShuYW1lKSB7IH0JDQogIA0K
ICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdm9pZCBTZXRVcCgpDQogIHsNCiAgICB0
ZXN0UGF0dGVybiA9IG5ldyBib29sWzcwXTsNCg0KICAgIGludCBpOw0KICAg
IGZvcihpID0gMDsgaSA8IHRlc3RQYXR0ZXJuLkxlbmd0aC8yOyBpKyspDQog
ICAgICB0ZXN0UGF0dGVybltpXSA9ICgoaSAlIDIpID09IDApOw0KICAgIGZv
cig7IGkgPCB0ZXN0UGF0dGVybi5MZW5ndGg7IGkrKykNCiAgICAgIHRlc3RQ
YXR0ZXJuW2ldID0gKChpICUgMikgIT0gMCk7DQoNCiAgICB0ZXN0QmEgPSBu
ZXcgQml0QXJyYXkoNzApOw0KICAgIGZvcihpID0gMDsgaSA8IHRlc3RCYS5M
ZW5ndGgvMjsgaSsrKQ0KICAgICAgdGVzdEJhW2ldID0gKChpICUgMikgPT0g
MCk7DQogICAgZm9yKDsgaSA8IHRlc3RCYS5MZW5ndGg7IGkrKykNCiAgICAg
IHRlc3RCYVtpXSA9ICgoaSAlIDIpICE9IDApOw0KDQogICAgLy8gZm9yIFRl
c3RBbmQsIFRlc3RPciwgVGVzdE5vdCwgVGVzdFhvcg0KICAgIG9wMSA9IG5l
dyBCaXRBcnJheShuZXcgaW50W10geyAweDMzMzMzMzMzLCAweDMzMzMzMzMz
IH0pOw0KICAgIG9wMiA9IG5ldyBCaXRBcnJheShuZXcgaW50W10geyAweDY2
NjY2NjY2LCAweDY2NjY2NjY2IH0pOw0KICB9DQogIA0KICBwdWJsaWMgdm9p
ZCBUZXN0Qm9vbENvbnN0cnVjdG9yKCkNCiAgew0KICAgIEJpdEFycmF5IGJh
ID0gbmV3IEJpdEFycmF5KHRlc3RQYXR0ZXJuKTsNCiAgICB2ZXJpZnlQYXR0
ZXJuKGJhLCB0ZXN0UGF0dGVybik7DQogIH0NCg0KICBwdWJsaWMgdm9pZCBU
ZXN0Q29weUNvbnN0cnVjdG9yKCkgDQogIHsNCiAgICBCaXRBcnJheSBiYSA9
IG5ldyBCaXRBcnJheSh0ZXN0QmEpOw0KDQogICAgdmVyaWZ5UGF0dGVybihi
YSwgdGVzdFBhdHRlcm4pOw0KICB9DQoNCiAgcHVibGljIHZvaWQgVGVzdEJ5
dGVDb25zdHJ1Y3RvcigpDQogIHsNCiAgICBieXRlIFtdIGJ5dGVBcnIgPSBu
ZXcgYnl0ZVtdIHsgMHhhYSwgMHg1NSwgMHhhYSwgMHg1NSwgMHg4MCB9Ow0K
ICAgIEJpdEFycmF5IGJhID0gbmV3IEJpdEFycmF5KGJ5dGVBcnIpOw0KICAg
IA0KICAgIEFzc2VydEVxdWFscyhiYS5MZW5ndGgsIGJ5dGVBcnIuTGVuZ3Ro
ICogOCk7DQogICAgDQogICAgLy8gc3BvdCBjaGVjaw0KICAgIEFzc2VydChi
YVs3XSk7DQogICAgQXNzZXJ0KCFiYVs2XSk7DQogICAgQXNzZXJ0KCFiYVsx
NV0pOw0KICAgIEFzc2VydChiYVsxNF0pOw0KICAgIEFzc2VydChiYVszOV0p
Ow0KICAgIEFzc2VydCghYmFbMzVdKTsNCg0KICB9DQoNCiAgcHVibGljIHZv
aWQgVGVzdEludENvbnN0cnVjdG9yKCkNCiAgew0KICAgIGludCBbXSBpbnRB
cnIgPSBuZXcgaW50W10geyB+MHg1NTU1NTU1NSwgMHg1NTU1NTU1MSB9Ow0K
ICAgIEJpdEFycmF5IGJhID0gbmV3IEJpdEFycmF5KGludEFycik7DQogICAg
DQogICAgQXNzZXJ0RXF1YWxzKGJhLkxlbmd0aCwgaW50QXJyLkxlbmd0aCAq
IDMyKTsNCiAgICANCiAgICAvLyBzcG90IGNoZWNrDQogICAgDQogICAgQXNz
ZXJ0KGJhWzMxXSk7DQogICAgQXNzZXJ0KCFiYVszMF0pOw0KICAgIEFzc2Vy
dCghYmFbNjNdKTsNCiAgICBBc3NlcnQoYmFbNjJdKTsNCiAgICBBc3NlcnQo
YmFbMzJdKTsNCiAgICBBc3NlcnQoIWJhWzM1XSk7DQogIH0NCg0KICBwdWJs
aWMgdm9pZCBUZXN0VmFsQ29uc3RydWN0b3IoKQ0KICB7DQogICAgQml0QXJy
YXkgYmEgPSBuZXcgQml0QXJyYXkoNjQsIGZhbHNlKTsNCg0KICAgIEFzc2Vy
dEVxdWFscyhiYS5MZW5ndGgsIDY0KTsNCiAgICBmb3JlYWNoIChib29sIGIg
aW4gYmEpDQogICAgICBBc3NlcnQoIWIpOw0KDQogICAgYmEgPSBuZXcgQml0
QXJyYXkoNjQsIHRydWUpOw0KDQogICAgQXNzZXJ0RXF1YWxzKGJhLkxlbmd0
aCwgNjQpOw0KICAgIGZvcmVhY2ggKGJvb2wgYiBpbiBiYSkNCiAgICAgIEFz
c2VydChiKTsNCiAgfQ0KDQogIHB1YmxpYyB2b2lkIFRlc3RDbG9uZSgpDQog
IHsNCiAgICBCaXRBcnJheSBiYSA9IChCaXRBcnJheSl0ZXN0QmEuQ2xvbmUo
KTsNCg0KICAgIHZlcmlmeVBhdHRlcm4oYmEsIHRlc3RQYXR0ZXJuKTsNCg0K
ICAgIC8vIGVuc3VyZSB0aGF0IGNoYW5nZXMgaW4gYmEgZG9uJ3QgZ2V0IHBy
b3BhZ2F0ZWQgdG8gdGVzdEJhDQogICAgYmFbMF0gPSBmYWxzZTsNCiAgICBi
YVsxXSA9IGZhbHNlOw0KICAgIGJhWzJdID0gZmFsc2U7DQogICAgDQogICAg
dmVyaWZ5UGF0dGVybih0ZXN0QmEsIHRlc3RQYXR0ZXJuKTsNCiAgfQ0KICAN
CiAgcHVibGljIHZvaWQgVGVzdFNldExlbmd0aCgpDQogIHsNCiAgICBpbnQg
b3JpZ0xlbiA9IHRlc3RCYS5MZW5ndGg7DQogICAgdGVzdEJhLkxlbmd0aCAr
PSAzMzsNCg0KICAgIEFzc2VydEVxdWFscyhvcmlnTGVuICsgMzMsIHRlc3RC
YS5MZW5ndGgpOw0KICAgIGZvciAoaW50IGkgPSBvcmlnTGVuOyBpIDwgdGVz
dEJhLkxlbmd0aDsgaSsrKQ0KICAgICAgdGVzdEJhW2ldID0gdHJ1ZTsNCg0K
ICAgIHRlc3RCYS5MZW5ndGggLT0gMzM7DQogICAgdmVyaWZ5UGF0dGVybih0
ZXN0QmEsIHRlc3RQYXR0ZXJuKTsNCiAgfQ0KDQogIHB1YmxpYyB2b2lkIFRl
c3RBbmQoKQ0KICB7DQogICAgQml0QXJyYXkgcmVzdWx0ID0gb3AxLkFuZChv
cDIpOw0KICAgIEFzc2VydEVxdWFscyhyZXN1bHQuTGVuZ3RoLCBvcDEuTGVu
Z3RoKTsNCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5MZW5ndGg7
ICkNCiAgICB7DQogICAgICBBc3NlcnQoIXJlc3VsdFtpKytdKTsNCiAgICAg
IEFzc2VydChyZXN1bHRbaSsrXSk7DQogICAgICBBc3NlcnQoIXJlc3VsdFtp
KytdKTsNCiAgICAgIEFzc2VydCghcmVzdWx0W2krK10pOw0KICAgIH0NCiAg
fQ0KDQogIHB1YmxpYyB2b2lkIFRlc3RPcigpDQogIHsNCiAgICBCaXRBcnJh
eSByZXN1bHQgPSBvcDEuT3Iob3AyKTsNCiAgICBBc3NlcnRFcXVhbHMocmVz
dWx0Lkxlbmd0aCwgb3AxLkxlbmd0aCk7DQogICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZXN1bHQuTGVuZ3RoOyApDQogICAgew0KICAgICAgQXNzZXJ0KHJl
c3VsdFtpKytdKTsNCiAgICAgIEFzc2VydChyZXN1bHRbaSsrXSk7DQogICAg
ICBBc3NlcnQocmVzdWx0W2krK10pOw0KICAgICAgQXNzZXJ0KCFyZXN1bHRb
aSsrXSk7DQogICAgfQ0KICB9DQoNCiAgcHVibGljIHZvaWQgVGVzdE5vdCgp
DQogIHsNCiAgICBCaXRBcnJheSByZXN1bHQgPSBvcDEuTm90KCk7DQogICAg
QXNzZXJ0RXF1YWxzKHJlc3VsdC5MZW5ndGgsIG9wMS5MZW5ndGgpOw0KICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lkxlbmd0aDsgKQ0KICAgIHsN
CiAgICAgIEFzc2VydCghcmVzdWx0W2krK10pOw0KICAgICAgQXNzZXJ0KCFy
ZXN1bHRbaSsrXSk7DQogICAgICBBc3NlcnQocmVzdWx0W2krK10pOw0KICAg
ICAgQXNzZXJ0KHJlc3VsdFtpKytdKTsNCiAgICB9DQogIH0NCg0KICBwdWJs
aWMgdm9pZCBUZXN0WG9yKCkNCiAgew0KICAgIEJpdEFycmF5IHJlc3VsdCA9
IG9wMS5Yb3Iob3AyKTsNCiAgICBBc3NlcnRFcXVhbHMocmVzdWx0Lkxlbmd0
aCwgb3AxLkxlbmd0aCk7DQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1
bHQuTGVuZ3RoOyApDQogICAgew0KICAgICAgQXNzZXJ0KHJlc3VsdFtpKytd
KTsNCiAgICAgIEFzc2VydCghcmVzdWx0W2krK10pOw0KICAgICAgQXNzZXJ0
KHJlc3VsdFtpKytdKTsNCiAgICAgIEFzc2VydCghcmVzdWx0W2krK10pOw0K
ICAgIH0NCiAgfQ0KDQogIHB1YmxpYyB2b2lkIFRlc3RTZXRBbGwoKQ0KICB7
DQogICAgdGVzdEJhLlNldEFsbChmYWxzZSk7DQogICAgZm9yZWFjaChib29s
IGIgaW4gdGVzdEJhKQ0KICAgICAgQXNzZXJ0KCFiKTsNCiAgICB0ZXN0QmEu
U2V0QWxsKHRydWUpOw0KICAgIGZvcmVhY2goYm9vbCBiIGluIHRlc3RCYSkN
CiAgICAgIEFzc2VydChiKTsNCiAgfQ0KDQogIHB1YmxpYyB2b2lkIFRlc3RD
b3B5VG9Cb29sKCkNCiAgew0KICAgIGJvb2xbXSBiYXJyYXkgPSBuZXcgYm9v
bFt0ZXN0QmEuTGVuZ3RoICsgMTBdOw0KICAgIA0KICAgIHRlc3RCYS5Db3B5
VG8oYmFycmF5LCA1KTsNCg0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGVz
dEJhLkxlbmd0aDsgaSsrKQ0KICAgICAgQXNzZXJ0RXF1YWxzKHRlc3RCYVtp
XSwgYmFycmF5W2krNV0pOw0KICB9DQoNCiAgcHVibGljIHZvaWQgVGVzdENv
cHlUb0J5dGUoKQ0KICB7DQogICAgdGVzdEJhLkxlbmd0aCA9IDM0Ow0KICAg
IGJ5dGVbXSBiYXJyYXkgPSBuZXcgYnl0ZVs1ICsgMTBdOw0KICAgIA0KICAg
IHRlc3RCYS5Db3B5VG8oYmFycmF5LCA1KTsNCg0KICAgIGZvciAoaW50IGkg
PSA1OyBpIDwgOTsgaSsrKQ0KICAgICAgQXNzZXJ0RXF1YWxzKDB4NTUsIGJh
cnJheVtpXSAmIDB4ZmYpOw0KDQogICAgLy8gRklYTUU6IE1TIGZhaWxzIG9u
IHRoZSBuZXh0IGxpbmUuICBUaGlzIGlzIGJlY2F1c2UNCiAgICAvLyB3ZSB0
cnVuY2F0ZWQgdGVzdEJhLkxlbmd0aCwgYW5kIE1TJ3MgaW50ZXJuYWwgYXJy
YXkgc3RpbGwNCiAgICAvLyBoYXMgdGhlIG9sZCBiaXRzIHNldC4gIENvcHlU
bygpIGRvZXNuJ3Qgc2F5IHNwZWNpZmljYWxseQ0KICAgIC8vIHdoZXRoZXIg
dGhlICJqdW5rIiBiaXRzIChiaXRzIHBhc3QgTGVuZ3RoLCBidXQgd2l0aGlu
IExlbmd0aA0KICAgIC8vIHJvdW5kZWQgdXAgdG8gMzIpIHdpbGwgYmUgY29w
aWVkIGFzIDAsIG9yIGlmIHRob3NlIGJpdHMgYXJlDQogICAgLy8gdW5kZWZp
bmVkLg0KICAgIC8vQXNzZXJ0RXF1YWxzKDB4MDEsIGJhcnJheVs5XSAmIDB4
ZmYpOw0KICB9DQoNCiAgcHVibGljIHZvaWQgVGVzdENvcHlUb0ludCgpDQog
IHsNCiAgICB0ZXN0QmEuTGVuZ3RoID0gMzQ7DQogICAgaW50W10gaWFycmF5
ID0gbmV3IGludFsyICsgMTBdOw0KICAgIA0KICAgIHRlc3RCYS5Db3B5VG8o
aWFycmF5LCA1KTsNCg0KICAgIEFzc2VydEVxdWFscygweDU1NTU1NTU1LCBp
YXJyYXlbNV0pOw0KICAgIC8vIEZJWE1FOiAgU2FtZSB0aGluZyBoZXJlIGFz
IGluIFRlc3RDb3B5VG9CeXRlDQogICAgLy9Bc3NlcnRFcXVhbHMoMHgwMSwg
aWFycmF5WzZdKTsNCiAgfQ0KDQogIHB1YmxpYyB2b2lkIFRlc3RFbnVtZXJh
dG9yKCkNCiAgew0KICAgIElFbnVtZXJhdG9yIGUgPSB0ZXN0QmEuR2V0RW51
bWVyYXRvcigpOw0KICAgIA0KICAgIGZvciAoaW50IGkgPSAwOyBlLk1vdmVO
ZXh0KCk7IGkrKykNCiAgICAgIEFzc2VydEVxdWFscyhlLkN1cnJlbnQsIHRl
c3RQYXR0ZXJuW2ldKTsNCg0KICAgIEFzc2VydCghZS5Nb3ZlTmV4dCgpKTsN
CiAgICAvLyByZWFkLCB0byBtYWtlIHN1cmUgcmVhZGluZyBpc24ndCBjb25z
aWRlcmVkIGEgd3JpdGUuDQogICAgYm9vbCBiID0gdGVzdEJhWzBdOw0KDQog
ICAgZS5SZXNldCgpOw0KICAgIGZvciAoaW50IGkgPSAwOyBlLk1vdmVOZXh0
KCk7IGkrKykNCiAgICAgIEFzc2VydEVxdWFscyhlLkN1cnJlbnQsIHRlc3RQ
YXR0ZXJuW2ldKTsNCg0KICAgIHRyeQ0KICAgIHsNCiAgICAgIGUuUmVzZXQo
KTsNCiAgICAgIHRlc3RCYVswXSA9ICF0ZXN0QmFbMF07DQogICAgICBlLk1v
dmVOZXh0KCk7DQogICAgICBGYWlsKCJJRW51bWVyYXRvci5Nb3ZlTmV4dCgp
IHNob3VsZCB0aHJvdyB3aGVuIGNvbGxlY3Rpb24gbW9kaWZpZWQuIik7DQog
ICAgfQ0KICAgIGNhdGNoIChJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKQ0K
ICAgIHsNCiAgICB9DQogIH0NCn0NCg0KDQoNCg0KDQoNCg==

--0-1475360259-995438758=:83393--