0x60806040523480156200001157600080fd5b5060405162001d8e38038062001d8e833981810160405281019062000037919062000323565b6040518060400160405280600881526020017f466f7220546573740000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f465400000000000000000000000000000000000000000000000000000000000081525069d3c21bcecceda10000008260049081620000bf9190620005cf565b508160059081620000d19190620005cf565b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200012581336200012f60201b60201c565b50505050620007d1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620001c2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b99062000717565b60405180910390fd5b620001d660008284620002b460201b60201c565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000227919062000768565b925050819055508160008082825462000241919062000768565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051620002a89190620007b4565b60405180910390a35050565b505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620002eb82620002be565b9050919050565b620002fd81620002de565b81146200030957600080fd5b50565b6000815190506200031d81620002f2565b92915050565b6000602082840312156200033c576200033b620002b9565b5b60006200034c848285016200030c565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003d757607f821691505b602082108103620003ed57620003ec6200038f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000418565b62000463868362000418565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004b0620004aa620004a4846200047b565b62000485565b6200047b565b9050919050565b6000819050919050565b620004cc836200048f565b620004e4620004db82620004b7565b84845462000425565b825550505050565b600090565b620004fb620004ec565b62000508818484620004c1565b505050565b5b81811015620005305762000524600082620004f1565b6001810190506200050e565b5050565b601f8211156200057f576200054981620003f3565b620005548462000408565b8101602085101562000564578190505b6200057c620005738562000408565b8301826200050d565b50505b505050565b600082821c905092915050565b6000620005a46000198460080262000584565b1980831691505092915050565b6000620005bf838362000591565b9150826002028217905092915050565b620005da8262000355565b67ffffffffffffffff811115620005f657620005f562000360565b5b620006028254620003be565b6200060f82828562000534565b600060209050601f83116001811462000647576000841562000632578287015190505b6200063e8582620005b1565b865550620006ae565b601f1984166200065786620003f3565b60005b8281101562000681578489015182556001820191506020850194506020810190506200065a565b86831015620006a157848901516200069d601f89168262000591565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f6e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b6000620006ff600d83620006b6565b91506200070c82620006c7565b602082019050919050565b600060208201905081810360008301526200073281620006f0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000775826200047b565b915062000782836200047b565b92508282019050808211156200079d576200079c62000739565b5b92915050565b620007ae816200047b565b82525050565b6000602082019050620007cb6000830184620007a3565b92915050565b6115ad80620007e16000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806394bf804d1161007157806394bf804d1461017b57806395d89b41146101975780639dc29fac146101b5578063a9059cbb146101d1578063dd62ed3e146101ed578063df58c42a1461021d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd146100f357806323b872dd14610111578063313ce5671461012d57806370a082311461014b575b600080fd5b6100c1610239565b6040516100ce9190610e3f565b60405180910390f35b6100f160048036038101906100ec9190610f09565b6102cb565b005b6100fb6102da565b6040516101089190610f58565b60405180910390f35b61012b60048036038101906101269190610f73565b6102e3565b005b6101356105a5565b6040516101429190610f58565b60405180910390f35b61016560048036038101906101609190610fc6565b6105ae565b6040516101729190610f58565b60405180910390f35b61019560048036038101906101909190610ff3565b6105f7565b005b61019f61076b565b6040516101ac9190610e3f565b60405180910390f35b6101cf60048036038101906101ca9190610f09565b6107fd565b005b6101eb60048036038101906101e69190610f09565b61090b565b005b61020760048036038101906102029190611033565b610a7a565b6040516102149190610f58565b60405180910390f35b610237600480360381019061023291906111bb565b610b01565b005b60606004805461024890611246565b80601f016020809104026020016040519081016040528092919081815260200182805461027490611246565b80156102c15780601f10610296576101008083540402835291602001916102c1565b820191906000526020600020905b8154815290600101906020018083116102a457829003601f168201915b5050505050905090565b6102d6338383610cbf565b5050565b60008054905090565b8281806102ef836105ae565b1015610330576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610327906112c3565b60405180910390fd5b61033b858585610daa565b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156103fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f19061132f565b60405180910390fd5b82600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610486919061137e565b9250508190555082600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546104dc919061137e565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461053291906113b2565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516105969190610f58565b60405180910390a35050505050565b60006012905090565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067e90611432565b60405180910390fd5b61069360008284610daa565b81600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106e291906113b2565b92505081905550816000808282546106fa91906113b2565b925050819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161075f9190610f58565b60405180910390a35050565b60606005805461077a90611246565b80601f01602080910402602001604051908101604052809291908181526020018280546107a690611246565b80156107f35780601f106107c8576101008083540402835291602001916107f3565b820191906000526020600020905b8154815290600101906020018083116107d657829003601f168201915b5050505050905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490611432565b60405180910390fd5b61089982600083610daa565b80600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108e8919061137e565b9250508190555080600080828254610900919061137e565b925050819055505050565b338180610917836105ae565b1015610958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094f906112c3565b60405180910390fd5b610963338585610daa565b82600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109b2919061137e565b9250508190555082600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610a0891906113b2565b925050819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a6c9190610f58565b60405180910390a350505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000825182610b109190611452565b905080610b1c336105ae565b1015610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b54906114e0565b60405180910390fd5b610b6933600083610daa565b80600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610bb8919061137e565b9250508190555060005b8351811015610cb9576000848281518110610be057610bdf611500565b5b6020026020010151905083600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c3991906113b2565b925050819055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610c9d9190610f58565b60405180910390a3508080610cb19061152f565b915050610bc2565b50505050565b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f6e11fb1b7f119e3f2fa29896ef5fdf8b8a2d0d4df6fe90ba8668e7d8b2ffa25e83604051610d9d9190610f58565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610de9578082015181840152602081019050610dce565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e1182610daf565b610e1b8185610dba565b9350610e2b818560208601610dcb565b610e3481610df5565b840191505092915050565b60006020820190508181036000830152610e598184610e06565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ea082610e75565b9050919050565b610eb081610e95565b8114610ebb57600080fd5b50565b600081359050610ecd81610ea7565b92915050565b6000819050919050565b610ee681610ed3565b8114610ef157600080fd5b50565b600081359050610f0381610edd565b92915050565b60008060408385031215610f2057610f1f610e6b565b5b6000610f2e85828601610ebe565b9250506020610f3f85828601610ef4565b9150509250929050565b610f5281610ed3565b82525050565b6000602082019050610f6d6000830184610f49565b92915050565b600080600060608486031215610f8c57610f8b610e6b565b5b6000610f9a86828701610ebe565b9350506020610fab86828701610ebe565b9250506040610fbc86828701610ef4565b9150509250925092565b600060208284031215610fdc57610fdb610e6b565b5b6000610fea84828501610ebe565b91505092915050565b6000806040838503121561100a57611009610e6b565b5b600061101885828601610ef4565b925050602061102985828601610ebe565b9150509250929050565b6000806040838503121561104a57611049610e6b565b5b600061105885828601610ebe565b925050602061106985828601610ebe565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6110b082610df5565b810181811067ffffffffffffffff821117156110cf576110ce611078565b5b80604052505050565b60006110e2610e61565b90506110ee82826110a7565b919050565b600067ffffffffffffffff82111561110e5761110d611078565b5b602082029050602081019050919050565b600080fd5b6000611137611132846110f3565b6110d8565b9050808382526020820190506020840283018581111561115a5761115961111f565b5b835b81811015611183578061116f8882610ebe565b84526020840193505060208101905061115c565b5050509392505050565b600082601f8301126111a2576111a1611073565b5b81356111b2848260208601611124565b91505092915050565b600080604083850312156111d2576111d1610e6b565b5b600083013567ffffffffffffffff8111156111f0576111ef610e70565b5b6111fc8582860161118d565b925050602061120d85828601610ef4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061125e57607f821691505b60208210810361127157611270611217565b5b50919050565b7f6e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b60006112ad601283610dba565b91506112b882611277565b602082019050919050565b600060208201905081810360008301526112dc816112a0565b9050919050565b7f636865636b20616c6c6f77616e63652100000000000000000000000000000000600082015250565b6000611319601083610dba565b9150611324826112e3565b602082019050919050565b600060208201905081810360008301526113488161130c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061138982610ed3565b915061139483610ed3565b92508282039050818111156113ac576113ab61134f565b5b92915050565b60006113bd82610ed3565b91506113c883610ed3565b92508282019050808211156113e0576113df61134f565b5b92915050565b7f6e6f7420616e206f776e65722100000000000000000000000000000000000000600082015250565b600061141c600d83610dba565b9150611427826113e6565b602082019050919050565b6000602082019050818103600083015261144b8161140f565b9050919050565b600061145d82610ed3565b915061146883610ed3565b925082820261147681610ed3565b9150828204841483151761148d5761148c61134f565b5b5092915050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b60006114ca601283610dba565b91506114d582611494565b602082019050919050565b600060208201905081810360008301526114f9816114bd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061153a82610ed3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361156c5761156b61134f565b5b60018201905091905056fea26469706673582212208847aadb6e4d56b1bca609674f6bf955cd1c7853f4b27cfe2eb2ae82f3d1aab564736f6c634300081200330000000000000000000000007c6f0bbeccc4c0f445024fa4818668509d8b9287