0x60806040523480156200001157600080fd5b506040518060400160405280600e81526020017f436f736d6963204a6f75726e65790000000000000000000000000000000000008152506040518060400160405280600381526020017f535043000000000000000000000000000000000000000000000000000000000081525081600090816200008f91906200060f565b508060019081620000a191906200060f565b505050620000b7336000620000bd60201b60201c565b620007eb565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200012f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001269062000757565b60405180910390fd5b62000140816200030360201b60201c565b1562000183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017a90620007c9565b60405180910390fd5b620001996000838360016200034c60201b60201c565b620001aa816200030360201b60201c565b15620001ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001e490620007c9565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4620002ff6000838360016200035260201b60201c565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166200032d836200035860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200041757607f821691505b6020821081036200042d576200042c620003cf565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000458565b620004a3868362000458565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004f0620004ea620004e484620004bb565b620004c5565b620004bb565b9050919050565b6000819050919050565b6200050c83620004cf565b620005246200051b82620004f7565b84845462000465565b825550505050565b600090565b6200053b6200052c565b6200054881848462000501565b505050565b5b8181101562000570576200056460008262000531565b6001810190506200054e565b5050565b601f821115620005bf57620005898162000433565b620005948462000448565b81016020851015620005a4578190505b620005bc620005b38562000448565b8301826200054d565b50505b505050565b600082821c905092915050565b6000620005e460001984600802620005c4565b1980831691505092915050565b6000620005ff8383620005d1565b9150826002028217905092915050565b6200061a8262000395565b67ffffffffffffffff811115620006365762000635620003a0565b5b620006428254620003fe565b6200064f82828562000574565b600060209050601f83116001811462000687576000841562000672578287015190505b6200067e8582620005f1565b865550620006ee565b601f198416620006978662000433565b60005b82811015620006c1578489015182556001820191506020850194506020810190506200069a565b86831015620006e15784890151620006dd601f891682620005d1565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006200073f602083620006f6565b91506200074c8262000707565b602082019050919050565b60006020820190508181036000830152620007728162000730565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620007b1601c83620006f6565b9150620007be8262000779565b602082019050919050565b60006020820190508181036000830152620007e481620007a2565b9050919050565b61241e80620007fb6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c806389a89002116100a2578063a6f9108711610071578063a6f91087146102e1578063b88d4fde146102ff578063c87b56dd1461031b578063d54db2c01461034b578063e985e9c51461036957610116565b806389a890021461026b57806395d89b4114610289578063a22cb465146102a7578063a3f4df7e146102c357610116565b806323b872dd116100e957806323b872dd146101b557806342842e0e146101d15780636352211e146101ed57806370a082311461021d5780637a8032441461024d57610116565b806301ffc9a71461011b57806306fdde031461014b578063081812fc14610169578063095ea7b314610199575b600080fd5b61013560048036038101906101309190611740565b610399565b6040516101429190611788565b60405180910390f35b61015361047b565b6040516101609190611833565b60405180910390f35b610183600480360381019061017e919061188b565b61050d565b60405161019091906118f9565b60405180910390f35b6101b360048036038101906101ae9190611940565b610553565b005b6101cf60048036038101906101ca9190611980565b61066a565b005b6101eb60048036038101906101e69190611980565b6106ca565b005b6102076004803603810190610202919061188b565b6106ea565b60405161021491906118f9565b60405180910390f35b610237600480360381019061023291906119d3565b610770565b6040516102449190611a0f565b60405180910390f35b610255610827565b6040516102629190611833565b60405180910390f35b610273610843565b6040516102809190611a0f565b60405180910390f35b610291610848565b60405161029e9190611833565b60405180910390f35b6102c160048036038101906102bc9190611a56565b6108da565b005b6102cb6108f0565b6040516102d89190611833565b60405180910390f35b6102e9610929565b6040516102f69190611833565b60405180910390f35b61031960048036038101906103149190611bcb565b610962565b005b6103356004803603810190610330919061188b565b6109c4565b6040516103429190611833565b60405180910390f35b610353610a67565b6040516103609190611833565b60405180910390f35b610383600480360381019061037e9190611c4e565b610aa0565b6040516103909190611788565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061046457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610474575061047382610b34565b5b9050919050565b60606000805461048a90611cbd565b80601f01602080910402602001604051908101604052809291908181526020018280546104b690611cbd565b80156105035780601f106104d857610100808354040283529160200191610503565b820191906000526020600020905b8154815290600101906020018083116104e657829003601f168201915b5050505050905090565b600061051882610b9e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061055e826106ea565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c590611d60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166105ed610be9565b73ffffffffffffffffffffffffffffffffffffffff16148061061c575061061b81610616610be9565b610aa0565b5b61065b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065290611df2565b60405180910390fd5b6106658383610bf1565b505050565b61067b610675610be9565b82610caa565b6106ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b190611e84565b60405180910390fd5b6106c5838383610d3f565b505050565b6106e583838360405180602001604052806000815250610962565b505050565b6000806106f683611038565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90611ef0565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d790611f82565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6040518060800160405280604681526020016123a36046913981565b600081565b60606001805461085790611cbd565b80601f016020809104026020016040519081016040528092919081815260200182805461088390611cbd565b80156108d05780601f106108a5576101008083540402835291602001916108d0565b820191906000526020600020905b8154815290600101906020018083116108b357829003601f168201915b5050505050905090565b6108ec6108e5610be9565b8383611075565b5050565b6040518060400160405280600e81526020017f436f736d6963204a6f75726e657900000000000000000000000000000000000081525081565b6040518060400160405280600f81526020017f5370616365204578706c6f72657273000000000000000000000000000000000081525081565b61097361096d610be9565b83610caa565b6109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a990611e84565b60405180910390fd5b6109be848484846111e1565b50505050565b606060008214610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0090611fee565b60405180910390fd5b6000610a148361123d565b90506000815111610a345760405180602001604052806000815250610a5f565b80610a3e846112a5565b604051602001610a4f92919061204a565b6040516020818303038152906040525b915050919050565b6040518060400160405280600381526020017f535043000000000000000000000000000000000000000000000000000000000081525081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610ba781611373565b610be6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd90611ef0565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610c64836106ea565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610cb6836106ea565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610cf85750610cf78185610aa0565b5b80610d3657508373ffffffffffffffffffffffffffffffffffffffff16610d1e8461050d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610d5f826106ea565b73ffffffffffffffffffffffffffffffffffffffff1614610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac906120e0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1b90612172565b60405180910390fd5b610e3183838360016113b4565b8273ffffffffffffffffffffffffffffffffffffffff16610e51826106ea565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9e906120e0565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461103383838360016113ba565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036110e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110da906121de565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111d49190611788565b60405180910390a3505050565b6111ec848484610d3f565b6111f8848484846113c0565b611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90612270565b60405180910390fd5b50505050565b606061124882610b9e565b6000611252611547565b90506000815111611272576040518060200160405280600081525061129d565b8061127c846112a5565b60405160200161128d92919061204a565b6040516020818303038152906040525b915050919050565b6060600060016112b48461155e565b01905060008167ffffffffffffffff8111156112d3576112d2611aa0565b5b6040519080825280601f01601f1916602001820160405280156113055781602001600182028036833780820191505090505b509050600082602001820190505b600115611368578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161135c5761135b612290565b5b04945060008503611313575b819350505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1661139583611038565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b60006113e18473ffffffffffffffffffffffffffffffffffffffff166116b1565b1561153a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261140a610be9565b8786866040518563ffffffff1660e01b815260040161142c9493929190612314565b6020604051808303816000875af192505050801561146857506040513d601f19601f820116820180604052508101906114659190612375565b60015b6114ea573d8060008114611498576040519150601f19603f3d011682016040523d82523d6000602084013e61149d565b606091505b5060008151036114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990612270565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061153f565b600190505b949350505050565b606060405180602001604052806000815250905090565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106115bc577a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083816115b2576115b1612290565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106115f9576d04ee2d6d415b85acef810000000083816115ef576115ee612290565b5b0492506020810190505b662386f26fc10000831061162857662386f26fc10000838161161e5761161d612290565b5b0492506010810190505b6305f5e1008310611651576305f5e100838161164757611646612290565b5b0492506008810190505b612710831061167657612710838161166c5761166b612290565b5b0492506004810190505b60648310611699576064838161168f5761168e612290565b5b0492506002810190505b600a83106116a8576001810190505b80915050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61171d816116e8565b811461172857600080fd5b50565b60008135905061173a81611714565b92915050565b600060208284031215611756576117556116de565b5b60006117648482850161172b565b91505092915050565b60008115159050919050565b6117828161176d565b82525050565b600060208201905061179d6000830184611779565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156117dd5780820151818401526020810190506117c2565b60008484015250505050565b6000601f19601f8301169050919050565b6000611805826117a3565b61180f81856117ae565b935061181f8185602086016117bf565b611828816117e9565b840191505092915050565b6000602082019050818103600083015261184d81846117fa565b905092915050565b6000819050919050565b61186881611855565b811461187357600080fd5b50565b6000813590506118858161185f565b92915050565b6000602082840312156118a1576118a06116de565b5b60006118af84828501611876565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118e3826118b8565b9050919050565b6118f3816118d8565b82525050565b600060208201905061190e60008301846118ea565b92915050565b61191d816118d8565b811461192857600080fd5b50565b60008135905061193a81611914565b92915050565b60008060408385031215611957576119566116de565b5b60006119658582860161192b565b925050602061197685828601611876565b9150509250929050565b600080600060608486031215611999576119986116de565b5b60006119a78682870161192b565b93505060206119b88682870161192b565b92505060406119c986828701611876565b9150509250925092565b6000602082840312156119e9576119e86116de565b5b60006119f78482850161192b565b91505092915050565b611a0981611855565b82525050565b6000602082019050611a246000830184611a00565b92915050565b611a338161176d565b8114611a3e57600080fd5b50565b600081359050611a5081611a2a565b92915050565b60008060408385031215611a6d57611a6c6116de565b5b6000611a7b8582860161192b565b9250506020611a8c85828601611a41565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611ad8826117e9565b810181811067ffffffffffffffff82111715611af757611af6611aa0565b5b80604052505050565b6000611b0a6116d4565b9050611b168282611acf565b919050565b600067ffffffffffffffff821115611b3657611b35611aa0565b5b611b3f826117e9565b9050602081019050919050565b82818337600083830152505050565b6000611b6e611b6984611b1b565b611b00565b905082815260208101848484011115611b8a57611b89611a9b565b5b611b95848285611b4c565b509392505050565b600082601f830112611bb257611bb1611a96565b5b8135611bc2848260208601611b5b565b91505092915050565b60008060008060808587031215611be557611be46116de565b5b6000611bf38782880161192b565b9450506020611c048782880161192b565b9350506040611c1587828801611876565b925050606085013567ffffffffffffffff811115611c3657611c356116e3565b5b611c4287828801611b9d565b91505092959194509250565b60008060408385031215611c6557611c646116de565b5b6000611c738582860161192b565b9250506020611c848582860161192b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611cd557607f821691505b602082108103611ce857611ce7611c8e565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000611d4a6021836117ae565b9150611d5582611cee565b604082019050919050565b60006020820190508181036000830152611d7981611d3d565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000611ddc603d836117ae565b9150611de782611d80565b604082019050919050565b60006020820190508181036000830152611e0b81611dcf565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000611e6e602d836117ae565b9150611e7982611e12565b604082019050919050565b60006020820190508181036000830152611e9d81611e61565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000611eda6018836117ae565b9150611ee582611ea4565b602082019050919050565b60006020820190508181036000830152611f0981611ecd565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000611f6c6029836117ae565b9150611f7782611f10565b604082019050919050565b60006020820190508181036000830152611f9b81611f5f565b9050919050565b7f496e76616c696420746f6b656e20494400000000000000000000000000000000600082015250565b6000611fd86010836117ae565b9150611fe382611fa2565b602082019050919050565b6000602082019050818103600083015261200781611fcb565b9050919050565b600081905092915050565b6000612024826117a3565b61202e818561200e565b935061203e8185602086016117bf565b80840191505092915050565b60006120568285612019565b91506120628284612019565b91508190509392505050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006120ca6025836117ae565b91506120d58261206e565b604082019050919050565b600060208201905081810360008301526120f9816120bd565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061215c6024836117ae565b915061216782612100565b604082019050919050565b6000602082019050818103600083015261218b8161214f565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006121c86019836117ae565b91506121d382612192565b602082019050919050565b600060208201905081810360008301526121f7816121bb565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061225a6032836117ae565b9150612265826121fe565b604082019050919050565b600060208201905081810360008301526122898161224d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006122e6826122bf565b6122f081856122ca565b93506123008185602086016117bf565b612309816117e9565b840191505092915050565b600060808201905061232960008301876118ea565b61233660208301866118ea565b6123436040830185611a00565b818103606083015261235581846122db565b905095945050505050565b60008151905061236f81611714565b92915050565b60006020828403121561238b5761238a6116de565b5b600061239984828501612360565b9150509291505056fe68747470733a2f2f696d6167652e6c65786963612e6172742f66756c6c5f6a70672f62303133366131362d623735632d346233382d393832662d616165643331393435343134a2646970667358221220235b51686e476fa4eceb32a15dbf3af252e3d4a7fe637f54f8e6b4846e5d0cfe64736f6c63430008120033