0x608060405234801561000f575f80fd5b505f80546001600160a01b031916321790556140b38061002e5f395ff3fe608060405260043610610079575f3560e01c80639514481b1161004c5780639514481b146100ff5780639775bc7114610112578063c669e8271461013c578063cf6000cc1461015b575f80fd5b806306422b631461007d57806349789048146100ab578063633189b6146100cc57806364a3eee1146100e0575b5f80fd5b61009461008b366004613264565b505f9160609150565b6040516100a2929190613313565b60405180910390f35b3480156100b6575f80fd5b506100ca6100c536600461332b565b610188565b005b3480156100d7575f80fd5b506100ca6102f4565b3480156100eb575f80fd5b506100ca6100fa366004613445565b6103d9565b6100ca61010d3660046134f7565b610537565b610125610120366004613264565b610543565b6040805192151583526020830191909152016100a2565b348015610147575f80fd5b506100ca610156366004613445565b61055b565b348015610166575f80fd5b5061017a61017536600461359f565b610620565b6040519081526020016100a2565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461020d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f6e6f00000000000000000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b5f5473ffffffffffffffffffffffffffffffffffffffff168180156102ee575f5b818110156102ec575f61027e3087878581811061024d5761024d6135eb565b90506020020160208101906102629190613618565b73ffffffffffffffffffffffffffffffffffffffff1690610634565b905080156102e3575f6102d0858389898781811061029e5761029e6135eb565b90506020020160208101906102b39190613618565b73ffffffffffffffffffffffffffffffffffffffff169190610649565b9050806102e1576102e16001610770565b505b5060010161022e565b505b50505050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f6e6f0000000000000000000000000000000000000000000000000000000000006044820152606401610204565b5f5473ffffffffffffffffffffffffffffffffffffffff164780156103d55760405173ffffffffffffffffffffffffffffffffffffffff83169082156108fc029083905f818181858888f193505050501580156103d3573d5f803e3d5ffd5b505b5050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f6e6f0000000000000000000000000000000000000000000000000000000000006044820152606401610204565b81515f5b818110156102ee575f6104c33285848151811061047c5761047c6135eb565b6020026020010151878581518110610496576104966135eb565b602002602001015173ffffffffffffffffffffffffffffffffffffffff166106499092919063ffffffff16565b90508061052e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102049060208082526004908201527f6e6f706500000000000000000000000000000000000000000000000000000000604082015260600190565b5060010161045d565b6105408161077e565b50565b5f8061054e83610a9b565b9196919550909350505050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f6e6f0000000000000000000000000000000000000000000000000000000000006044820152606401610204565b81515f5b818110156102ee57610617328483815181106105fd576105fd6135eb565b6020026020010151868481518110610496576104966135eb565b506001016105df565b5f61062a82610d4d565b90505b9392505050565b5f6106405f84846113ab565b90505b92915050565b60405173ffffffffffffffffffffffffffffffffffffffff8381166024830152604482018390525f918291829190871690606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052516106fe9190613633565b5f604051808303815f865af19150503d805f8114610737576040519150601f19603f3d011682016040523d82523d5f602084013e61073c565b606091505b5091509150818015610766575080511580610766575080806020019051810190610766919061365d565b9695505050505050565b6040518181526004601c8201fd5b5f60605f836040015180602001905181019061079a9190613676565b90508060a00151610977575f816040015173ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff16109050815f015173ffffffffffffffffffffffffffffffffffffffff1663490e6cbc60e01b836060015183610811575f610817565b84608001515b84610826578560800151610828565b5f5b604080518082018252885173ffffffffffffffffffffffffffffffffffffffff16815260608c015160208083019190915291516108659201613714565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526108a39493929160240161374e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161092c9190613633565b5f604051808303815f865af19150503d805f8114610965576040519150601f19603f3d011682016040523d82523d5f602084013e61096a565b606091505b509094509250610a729050565b5f815f0151826060015183602001518460400151856080015160016040518060400160405280895f015173ffffffffffffffffffffffffffffffffffffffff1681526020018c606001518152506040516020016109d49190613714565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610a109291602001613788565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610a509695949392916020016137a2565b6040516020818303038152906040529050610a6a81610a9b565b509094509250505b826102ee578151600403610a9157610a91610a8c836137f0565b611536565b6102ee6001610770565b5f60605f805f805f805f89806020019051810190610ab99190613881565b9550955095509550955095505f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1610905081515f03610b8b576040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087811b8216602084015286901b1660348201525f90604801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052610b799291602001613788565b60405160208183030381529060405291505b5f8073ffffffffffffffffffffffffffffffffffffffff89167f128acb080000000000000000000000000000000000000000000000000000000089858881610bf157610bec600173fffd8963efd1fc6a506488495d951d5263988d2661393d565b610c01565b610c016401000276a36001613971565b89604051602401610c1695949392919061399e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610c9f9190613633565b5f604051808303815f865af19150503d805f8114610cd8576040519150601f19603f3d011682016040523d82523d5f602084013e610cdd565b606091505b509150915081610cfc57909a5098505f9750610d469650505050505050565b5f8082806020019051810190610d1291906139e4565b91509150838386610d2b57610d2684613a06565b610d34565b610d3483613a06565b9d509d509d5050505050505050505050505b9193909250565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f805f805f8089806020019051810190610dd89190613a3c565b50809450819750829650839550505050508095508173ffffffffffffffffffffffffffffffffffffffff1663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e599190613abc565b9450505f82610e8657610e81600173fffd8963efd1fc6a506488495d951d5263988d2661393d565b610e96565b610e966401000276a36001613971565b90505f8273ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ee2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f069190613af4565b90505f808473ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015610f53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f779190613b3c565b50505050509150915061109b8582898588888c6040805161012080820183525f80835260208084018290528385018290526060808501839052608080860184905260a080870185905260c080880186905260e080890187905261010098890187905289518084018b52878152808701889052808b01889052808601889052840187905289518084018b526fffffffffffffffffffffffffffffffff909c16808d5263ffffffff42168d8801528c8b018890528c86018890528c85018890528a519889018b529e885294870186905273ffffffffffffffffffffffffffffffffffffffff9c8d169887019890985260029d909d0b9185019190915283019190915298810197909752911515908601529583169484019490945216928101929092529091565b60408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810191909152919c509a5096506110fe95505050505050565b5f5b855115801590611145575085610100015173ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1614155b156113915760408051610140810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052906111c77f5339c296000000000000000000000000000000000000000000000000000000008686858c611541565b90508080156111d857508360400151155b80156111e357505f83115b156111ef575050611391565b5091506001018161120185828961166c565b61121d8160c0015182608001516112189190613bbf565b611749565b8751889061122c908390613bd2565b90525060a081015161123d90611749565b876020015161124c9190613bd2565b602088015286515f0361125f5750611391565b806060015173ffffffffffffffffffffffffffffffffffffffff16876040015173ffffffffffffffffffffffffffffffffffffffff160361133b5780604001511561130a575f6112b78860e001518360200151611779565b90508760c00151156112cf576112cc81613bf1565b90505b5f6112de8960a001518361189c565b6fffffffffffffffffffffffffffffffff90911660a08b01529050801561130757505050611391565b50505b8660c0015161131d57806020015161132e565b6001816020015161132e9190613c2d565b60020b606088015261138b565b805f015173ffffffffffffffffffffffffffffffffffffffff16876040015173ffffffffffffffffffffffffffffffffffffffff161461138b576113828760400151611940565b60020b60608801525b50611100565b856020015161139f90613a06565b98975050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff821660248201525f906060908290604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f70a082310000000000000000000000000000000000000000000000000000000017905290505f8690036114c0578473ffffffffffffffffffffffffffffffffffffffff16816040516114799190613633565b5f60405180830381855afa9150503d805f81146114b1576040519150601f19603f3d011682016040523d82523d5f602084013e6114b6565b606091505b5092506115299050565b8473ffffffffffffffffffffffffffffffffffffffff1686826040516114e69190613633565b5f604051808303818686fa925050503d805f811461151f576040519150601f19603f3d011682016040523d82523d5f602084013e611524565b606091505b509250505b5060200151949350505050565b604051818152600481fd5b5f61154f8686868686611cf5565b604083015173ffffffffffffffffffffffffffffffffffffffff16845260208401519091507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2761860029190910b12156115cc577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff276186020840152611638565b6115f57ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618613c6e565b60020b836020015160020b13156116385761162f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27618613c6e565b60020b60208401525b6116458360200151611d31565b73ffffffffffffffffffffffffffffffffffffffff16606090930192909252509392505050565b61171581604001518260c001516116ba5782610100015173ffffffffffffffffffffffffffffffffffffffff16846060015173ffffffffffffffffffffffffffffffffffffffff16116116f3565b82610100015173ffffffffffffffffffffffffffffffffffffffff16846060015173ffffffffffffffffffffffffffffffffffffffff16105b611701578360600151611708565b8261010001515b60a0840151845187612133565b60c086015260a085015260809093019290925273ffffffffffffffffffffffffffffffffffffffff90911660409091015250565b5f7f80000000000000000000000000000000000000000000000000000000000000008210611775575f80fd5b5090565b604051600282900b60248201525f908190819073ffffffffffffffffffffffffffffffffffffffff861690604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167ff30dba9300000000000000000000000000000000000000000000000000000000179052516118289190613633565b5f60405180830381855afa9150503d805f8114611860576040519150601f19603f3d011682016040523d82523d5f602084013e611865565b606091505b509150915081611879575f92505050610643565b5f8180602001905181019061188e9190613cb3565b602001519695505050505050565b5f805f83600f0b12156118fa576118b283613bf1565b6118bc9085613d50565b9150836fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff1611156118f557505f90506001611939565b611939565b6119048385613d79565b9150836fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff16101561193957505f905060015b9250929050565b5f6401000276a373ffffffffffffffffffffffffffffffffffffffff831610801590611995575073fffd8963efd1fc6a506488495d951d5263988d2673ffffffffffffffffffffffffffffffffffffffff8316105b6119fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600160248201527f52000000000000000000000000000000000000000000000000000000000000006044820152606401610204565b77ffffffffffffffffffffffffffffffffffffffff00000000602083901b166fffffffffffffffffffffffffffffffff811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c97908811961790941790921717909117171760808110611aac57611aa2607f82613da2565b83901c9150611abd565b611ab781607f613da2565b83901b91505b5f6040611acb608084613bd2565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c85611c4d9190613db5565b90505f6080611c6c6f028f6481ab7f045a5af012a19d003aaa84613bd2565b901d90505f6080611c8d846fdb2df09e81959a81455e260799a0632f613e00565b901d90508060020b8260020b14611ce6578873ffffffffffffffffffffffffffffffffffffffff16611cbe82611d31565b73ffffffffffffffffffffffffffffffffffffffff161115611ce05781611ce8565b80611ce8565b815b9998505050505050505050565b5f611d028483888861237c565b61010088015260010b60e0870152901515604086015260029190910b6020909401939093525090949350505050565b5f805f8360020b12611d46578260020b611d53565b8260020b611d5390613a06565b90505f816001165f03611d7757700100000000000000000000000000000000611d89565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611dc8576080611dc3826ffff97272373d413259a46990580e213a613e27565b901c90505b6004821615611df2576080611ded826ffff2e50f5f656932ef12357cf3c7fdcc613e27565b901c90505b6008821615611e1c576080611e17826fffe5caca7e10e4e61c3624eaa0941cd0613e27565b901c90505b6010821615611e46576080611e41826fffcb9843d60f6159c9db58835c926644613e27565b901c90505b6020821615611e70576080611e6b826fff973b41fa98c081472e6896dfb254c0613e27565b901c90505b6040821615611e9a576080611e95826fff2ea16466c96a3843ec78b326b52861613e27565b901c90505b6080821615611ec4576080611ebf826ffe5dee046a99a2a811c461f1969c3053613e27565b901c90505b610100821615611eef576080611eea826ffcbe86c7900a88aedcffc83b479aa3a4613e27565b901c90505b610200821615611f1a576080611f15826ff987a7253ac413176f2b074cf7815e54613e27565b901c90505b610400821615611f45576080611f40826ff3392b0822b70005940c7a398e4b70f3613e27565b901c90505b610800821615611f70576080611f6b826fe7159475a2c29b7443b29c7fa6e889d9613e27565b901c90505b611000821615611f9b576080611f96826fd097f3bdfd2022b8845ad8f792aa5825613e27565b901c90505b612000821615611fc6576080611fc1826fa9f746462d870fdf8a65dc1f90e061e5613e27565b901c90505b614000821615611ff1576080611fec826f70d869a156d2a1b890bb3df62baf32f7613e27565b901c90505b61800082161561201c576080612017826f31be135f97d08fd981231505542fcfa6613e27565b901c90505b62010000821615612048576080612043826f09aa508b5b7a84e1c677de54f3e99bc9613e27565b901c90505b6202000082161561207357608061206e826e5d6af8dedb81196699c329225ee604613e27565b901c90505b6204000082161561209d576080612098826d2216e584f5fa1ea926041bedfe98613e27565b901c90505b620800008216156120c55760806120c0826b048a170391f7dc42444e8fa2613e27565b901c90505b5f8460020b13156120fd576120fa817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613e6b565b90505b61210c64010000000082613e7e565b1561211857600161211a565b5f5b61212b9060ff16602083901c613bbf565b949350505050565b5f80808073ffffffffffffffffffffffffffffffffffffffff808916908a1610158187128015906121ca575f61217e896121708a620f4240613e91565b62ffffff16620f424061280b565b905082612197576121928c8c8c60016128d0565b6121a4565b6121a48b8d8c60016129ae565b95508581106121b5578a96506121c4565b6121c18c8b8386612aeb565b96505b5061221c565b816121e0576121db8b8b8b5f6129ae565b6121ec565b6121ec8a8c8b5f6128d0565b9350836121f889613a06565b106122055789955061221c565b6122198b8a6122138b613a06565b85612b49565b95505b73ffffffffffffffffffffffffffffffffffffffff8a811690871614821561228b578080156122485750815b61225e57612259878d8c60016129ae565b612260565b855b955080801561226d575081155b6122825761227d878d8c5f6128d0565b612284565b845b94506122d4565b8080156122955750815b6122ab576122a68c888c60016128d0565b6122ad565b855b95508080156122ba575081155b6122cf576122ca8c888c5f6129ae565b6122d1565b845b94505b811580156122e957506122e689613a06565b85115b156122fa576122f789613a06565b94505b81801561233357508a73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b1561234957612342868a613da2565b935061236d565b61236a8662ffffff8a166123608b620f4240613e91565b62ffffff16612ba5565b93505b50505095509550955095915050565b5f805f805f808689606001516123929190613ead565b90505f896060015160020b1280156123bb57508689606001516123b59190613f20565b60020b15155b156123ce57806123ca81613f41565b9150505b8860c00151156125dd575f6123e282612c00565b90945090505f600160ff831681901b906123fc9082613da2565b6124069190613bbf565b90505f8c60400151158061242457508c60e0015160010b8660010b14155b15612568575f808d60e0015173ffffffffffffffffffffffffffffffffffffffff168d89604051602401612461919060019190910b815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516124ea9190613633565b5f60405180830381855afa9150503d805f8114612522576040519150601f19603f3d011682016040523d82523d5f602084013e612527565b606091505b50915091508161254b575f805f805f9a509a509a509a509a50505050505050612800565b8080602001905181019061255f9190613f9d565b96505050612571565b8c610100015194505b845f0361257d57600196505b508381168015159750876125a8578961259960ff851686613c2d565b6125a39190613fb4565b6125d3565b896125b282612c1c565b6125bc9085613fd3565b6125c99060ff1686613c2d565b6125d39190613fb4565b98505050506127fe565b5f6125f16125ec836001613fec565b612c00565b90945090505f612608600160ff841681901b613da2565b1990505f8c60400151158061262757508c60e0015160010b8660010b14155b1561276b575f808d60e0015173ffffffffffffffffffffffffffffffffffffffff168d89604051602401612664919060019190910b815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290516126ed9190613633565b5f60405180830381855afa9150503d805f8114612725576040519150601f19603f3d011682016040523d82523d5f602084013e61272a565b606091505b50915091508161274e575f805f805f9a509a509a509a509a50505050505050612800565b808060200190518101906127629190613f9d565b96505050612774565b8c610100015194505b845f0361278057600196505b508381168015159750876127c1578961279a8460ff613fd3565b60ff166127a8866001613fec565b6127b29190613fec565b6127bc9190613fb4565b6127f8565b89836127cc83612d1f565b6127d69190613fd3565b60ff166127e4866001613fec565b6127ee9190613fec565b6127f89190613fb4565b98505050505b505b945094509450945094565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f0361285e575f8411612853575f80fd5b50829004905061062d565b808411612869575f80fd5b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161115612909579293925b8161295c576129576fffffffffffffffffffffffffffffffff841661292e878761393d565b73ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000061280b565b6129a5565b6129a56fffffffffffffffffffffffffffffffff841661297c878761393d565b73ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000612ba5565b95945050505050565b5f8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1611156129e7579293925b7bffffffffffffffffffffffffffffffff000000000000000000000000606084901b165f612a15878761393d565b73ffffffffffffffffffffffffffffffffffffffff1690505f8773ffffffffffffffffffffffffffffffffffffffff1611612a4e575f80fd5b83612a9a578673ffffffffffffffffffffffffffffffffffffffff16612a8b83838973ffffffffffffffffffffffffffffffffffffffff1661280b565b612a959190613e6b565b612ae0565b612ae0612abe83838973ffffffffffffffffffffffffffffffffffffffff16612ba5565b8873ffffffffffffffffffffffffffffffffffffffff16808204910615150190565b979650505050505050565b5f808573ffffffffffffffffffffffffffffffffffffffff1611612b0d575f80fd5b5f846fffffffffffffffffffffffffffffffff1611612b2a575f80fd5b81612b3c576129578585856001612e51565b6129a58585856001612fa3565b5f808573ffffffffffffffffffffffffffffffffffffffff1611612b6b575f80fd5b5f846fffffffffffffffffffffffffffffffff1611612b88575f80fd5b81612b99576129578585855f612fa3565b6129a58585855f612e51565b5f612bb184848461280b565b90505f8280612bc257612bc2613e3e565b848609111561062d577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110612bf6575f80fd5b806129a58161402d565b600281900b60081d5f612c1561010084613f20565b9050915091565b5f808211612c28575f80fd5b7001000000000000000000000000000000008210612c5357608091821c91612c509082614064565b90505b680100000000000000008210612c7657604091821c91612c739082614064565b90505b6401000000008210612c9557602091821c91612c929082614064565b90505b620100008210612cb257601091821c91612caf9082614064565b90505b6101008210612cce57600891821c91612ccb9082614064565b90505b60108210612ce957600491821c91612ce69082614064565b90505b60048210612d0457600291821c91612d019082614064565b90505b60028210612d1a57612d17600182614064565b90505b919050565b5f808211612d2b575f80fd5b5060ff6fffffffffffffffffffffffffffffffff821615612d5857612d51608082613fd3565b9050612d60565b608082901c91505b67ffffffffffffffff821615612d8257612d7b604082613fd3565b9050612d8a565b604082901c91505b63ffffffff821615612da857612da1602082613fd3565b9050612db0565b602082901c91505b61ffff821615612dcc57612dc5601082613fd3565b9050612dd4565b601082901c91505b60ff821615612def57612de8600882613fd3565b9050612df7565b600882901c91505b600f821615612e1257612e0b600482613fd3565b9050612e1a565b600482901c91505b6003821615612e3557612e2e600282613fd3565b9050612e3d565b600282901c91505b6001821615612d1a57612d17600182613fd3565b5f8115612eee575f73ffffffffffffffffffffffffffffffffffffffff841115612ea457612e9f846c01000000000000000000000000876fffffffffffffffffffffffffffffffff1661280b565b612ec4565b612ec46fffffffffffffffffffffffffffffffff8616606086901b613e6b565b9050612ee68173ffffffffffffffffffffffffffffffffffffffff8816613bbf565b91505061212b565b5f73ffffffffffffffffffffffffffffffffffffffff841115612f3a57612f35846c01000000000000000000000000876fffffffffffffffffffffffffffffffff16612ba5565b612f60565b612f60606085901b6fffffffffffffffffffffffffffffffff8716808204910615150190565b9050808673ffffffffffffffffffffffffffffffffffffffff1611612f83575f80fd5b612ee68173ffffffffffffffffffffffffffffffffffffffff8816613da2565b5f825f03612fb257508361212b565b7bffffffffffffffffffffffffffffffff000000000000000000000000606085901b168215613093575f73ffffffffffffffffffffffffffffffffffffffff871685612ffe8282613e27565b925061300a9083613e6b565b03613050575f61301a8284613bbf565b905082811061304e57613044838973ffffffffffffffffffffffffffffffffffffffff1683612ba5565b935050505061212b565b505b61308a828661307573ffffffffffffffffffffffffffffffffffffffff8b1683613e6b565b61307f9190613bbf565b808204910615150190565b9250505061212b565b5f73ffffffffffffffffffffffffffffffffffffffff8716856130b68282613e27565b92506130c29083613e6b565b1480156130ce57508082115b6130d6575f80fd5b5f6130e18284613da2565b9050613044838973ffffffffffffffffffffffffffffffffffffffff1683612ba5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff8111828210171561315457613154613104565b60405290565b604051610100810167ffffffffffffffff8111828210171561315457613154613104565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156131c5576131c5613104565b604052919050565b5f67ffffffffffffffff8211156131e6576131e6613104565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b5f82601f830112613221575f80fd5b813561323461322f826131cd565b61317e565b818152846020838601011115613248575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215613275575f80fd5b82359150602083013567ffffffffffffffff811115613292575f80fd5b61329e85828601613212565b9150509250929050565b5f5b838110156132c25781810151838201526020016132aa565b50505f910152565b5f81518084526132e18160208601602086016132a8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b828152604060208201525f61062a60408301846132ca565b5f806020838503121561333c575f80fd5b823567ffffffffffffffff80821115613353575f80fd5b818501915085601f830112613366575f80fd5b813581811115613374575f80fd5b8660208260051b8501011115613388575f80fd5b60209290920196919550909350505050565b5f67ffffffffffffffff8211156133b3576133b3613104565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114610540575f80fd5b5f82601f8301126133ed575f80fd5b813560206133fd61322f8361339a565b8083825260208201915060208460051b87010193508684111561341e575f80fd5b602086015b8481101561343a5780358352918301918301613423565b509695505050505050565b5f8060408385031215613456575f80fd5b823567ffffffffffffffff8082111561346d575f80fd5b818501915085601f830112613480575f80fd5b8135602061349061322f8361339a565b82815260059290921b840181019181810190898411156134ae575f80fd5b948201945b838610156134d55785356134c6816133bd565b825294820194908201906134b3565b965050860135925050808211156134ea575f80fd5b5061329e858286016133de565b5f60208284031215613507575f80fd5b813567ffffffffffffffff8082111561351e575f80fd5b9083019060808286031215613531575f80fd5b613539613131565b8235613544816133bd565b815260208381013590820152604083013582811115613561575f80fd5b61356d87828601613212565b604083015250606083013582811115613584575f80fd5b61359087828601613212565b60608301525095945050505050565b5f805f606084860312156135b1575f80fd5b8335925060208401359150604084013567ffffffffffffffff8111156135d5575f80fd5b6135e186828701613212565b9150509250925092565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215613628575f80fd5b813561062d816133bd565b5f82516136448184602087016132a8565b9190910192915050565b80518015158114612d1a575f80fd5b5f6020828403121561366d575f80fd5b6106408261364e565b5f60c08284031215613686575f80fd5b60405160c0810181811067ffffffffffffffff821117156136a9576136a9613104565b60405282516136b7816133bd565b815260208301516136c7816133bd565b602082015260408301516136da816133bd565b604082015260608301516136ed816133bd565b60608201526080838101519082015261370860a0840161364e565b60a08201529392505050565b6020815273ffffffffffffffffffffffffffffffffffffffff82511660208201525f602083015160408084015261212b60608401826132ca565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152826040820152608060608201525f61076660808301846132ca565b8215158152604060208201525f61062a60408301846132ca565b5f73ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261139f60c08301846132ca565b5f815160208301517fffffffff00000000000000000000000000000000000000000000000000000000808216935060048310156138375780818460040360031b1b83161693505b505050919050565b5f82601f83011261384e575f80fd5b815161385c61322f826131cd565b818152846020838601011115613870575f80fd5b61212b8260208301602087016132a8565b5f805f805f8060c08789031215613896575f80fd5b86516138a1816133bd565b60208801519096506138b2816133bd565b60408801519095506138c3816133bd565b60608801519094506138d4816133bd565b608088015160a0890151919450925067ffffffffffffffff8111156138f7575f80fd5b61390389828a0161383f565b9150509295509295509295565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff82811682821603908082111561396a5761396a613910565b5092915050565b73ffffffffffffffffffffffffffffffffffffffff81811683821601908082111561396a5761396a613910565b5f73ffffffffffffffffffffffffffffffffffffffff8088168352861515602084015285604084015280851660608401525060a06080830152612ae060a08301846132ca565b5f80604083850312156139f5575f80fd5b505080516020909101519092909150565b5f7f80000000000000000000000000000000000000000000000000000000000000008203613a3657613a36613910565b505f0390565b5f805f805f60a08688031215613a50575f80fd5b8551613a5b816133bd565b9450613a696020870161364e565b93506040860151925060608601519150608086015167ffffffffffffffff811115613a92575f80fd5b613a9e8882890161383f565b9150509295509295909350565b8051600281900b8114612d1a575f80fd5b5f60208284031215613acc575f80fd5b61064082613aab565b80516fffffffffffffffffffffffffffffffff81168114612d1a575f80fd5b5f60208284031215613b04575f80fd5b61064082613ad5565b8051612d1a816133bd565b805161ffff81168114612d1a575f80fd5b805163ffffffff81168114612d1a575f80fd5b5f805f805f805f60e0888a031215613b52575f80fd5b8751613b5d816133bd565b9650613b6b60208901613aab565b9550613b7960408901613b18565b9450613b8760608901613b18565b9350613b9560808901613b18565b9250613ba360a08901613b29565b9150613bb160c0890161364e565b905092959891949750929550565b8082018082111561064357610643613910565b8181035f83128015838313168383128216171561396a5761396a613910565b5f81600f0b7fffffffffffffffffffffffffffffffff800000000000000000000000000000008103613c2557613c25613910565b5f0392915050565b600282810b9082900b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008112627fffff8213171561064357610643613910565b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103613c2557613c25613910565b8051600681900b8114612d1a575f80fd5b5f6101008284031215613cc4575f80fd5b613ccc61315a565b613cd583613ad5565b8152602083015180600f0b8114613cea575f80fd5b806020830152506040830151604082015260608301516060820152613d1160808401613ca2565b6080820152613d2260a08401613b0d565b60a0820152613d3360c08401613b29565b60c0820152613d4460e0840161364e565b60e08201529392505050565b6fffffffffffffffffffffffffffffffff82811682821603908082111561396a5761396a613910565b6fffffffffffffffffffffffffffffffff81811683821601908082111561396a5761396a613910565b8181038181111561064357610643613910565b8082025f82127f800000000000000000000000000000000000000000000000000000000000000084141615613dec57613dec613910565b818105831482151761064357610643613910565b8082018281125f831280158216821582161715613e1f57613e1f613910565b505092915050565b808202811582820484141761064357610643613910565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82613e7957613e79613e3e565b500490565b5f82613e8c57613e8c613e3e565b500690565b62ffffff82811682821603908082111561396a5761396a613910565b5f8160020b8360020b80613ec357613ec3613e3e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000083141615613f1757613f17613910565b90059392505050565b5f8260020b80613f3257613f32613e3e565b808360020b0791505092915050565b5f8160020b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008103613f7557613f75613910565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b5f60208284031215613fad575f80fd5b5051919050565b5f8260020b8260020b028060020b915080821461396a5761396a613910565b60ff828116828216039081111561064357610643613910565b600281810b9083900b01627fffff81137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000008212171561064357610643613910565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361405d5761405d613910565b5060010190565b60ff81811683821601908111156106435761064361391056fea2646970667358221220b9b6d4e946966e4c811144b3cc1f9473ba2d3a4afe2e002ffff794b8b016f79664736f6c63430008170033