From 5a1cf5ae2a341b41d8bf4fcba0e0a358b333e7a0 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Wed, 7 Nov 2018 14:19:12 -0500 Subject: [PATCH 01/32] Add auth to endpoints. --- backend/.gitignore | 2 ++ backend/grant/proposal/views.py | 55 +++++++++++++---------------- backend/grant/user/models.py | 7 ++-- backend/grant/user/views.py | 14 +++++--- backend/grant/utils/auth.py | 40 ++++++++++++++++++++- backend/tests/user/test_user_api.py | 2 +- frontend/client/store/configure.tsx | 20 +++++++++++ 7 files changed, 99 insertions(+), 41 deletions(-) diff --git a/backend/.gitignore b/backend/.gitignore index 9ec0f3ca..229ce318 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -68,3 +68,5 @@ dump.rdb # jetbrains .idea/ +# vscode +.vscode/ diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index 67a2de40..af64e266 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -1,12 +1,14 @@ from datetime import datetime +from functools import wraps -from flask import Blueprint +from flask import Blueprint, g from flask_yoloapi import endpoint, parameter from sqlalchemy.exc import IntegrityError from grant.comment.models import Comment, comment_schema from grant.milestone.models import Milestone from grant.user.models import User, SocialMedia, Avatar +from grant.utils.auth import requires_sm, requires_team_member_auth from .models import Proposal, proposals_schema, proposal_schema, ProposalUpdate, proposal_update_schema, db blueprint = Blueprint("proposal", __name__, url_prefix="/api/v1/proposals") @@ -39,28 +41,22 @@ def get_proposal_comments(proposal_id): @blueprint.route("//comments", methods=["POST"]) +@requires_sm @endpoint.api( - parameter('userId', type=int, required=True), parameter('content', type=str, required=True) ) def post_proposal_comments(proposal_id, user_id, content): proposal = Proposal.query.filter_by(id=proposal_id).first() if proposal: - user = User.query.filter_by(id=user_id).first() - - if user: - comment = Comment( - proposal_id=proposal_id, - user_id=user_id, - content=content - ) - db.session.add(comment) - db.session.commit() - dumped_comment = comment_schema.dump(comment) - return dumped_comment, 201 - - else: - return {"message": "No user matching id"}, 404 + comment = Comment( + proposal_id=proposal_id, + user_id=g.current_user.id, + content=content + ) + db.session.add(comment) + db.session.commit() + dumped_comment = comment_schema.dump(comment) + return dumped_comment, 201 else: return {"message": "No proposal matching id"}, 404 @@ -83,6 +79,7 @@ def get_proposals(stage): @blueprint.route("/", methods=["POST"]) +@requires_sm @endpoint.api( parameter('crowdFundContractAddress', type=str, required=True), parameter('content', type=str, required=True), @@ -187,24 +184,20 @@ def get_proposal_update(proposal_id, update_id): return {"message": "No proposal matching id"}, 404 -# TODO: Add authentication to endpoint @blueprint.route("//updates", methods=["POST"]) +@requires_team_member_auth @endpoint.api( parameter('title', type=str, required=True), parameter('content', type=str, required=True) ) def post_proposal_update(proposal_id, title, content): - proposal = Proposal.query.filter_by(id=proposal_id).first() - if proposal: - update = ProposalUpdate( - proposal_id=proposal.id, - title=title, - content=content - ) - db.session.add(update) - db.session.commit() + update = ProposalUpdate( + proposal_id=g.current_proposal.id, + title=title, + content=content + ) + db.session.add(update) + db.session.commit() - dumped_update = proposal_update_schema.dump(update) - return dumped_update, 201 - else: - return {"message": "No proposal matching id"}, 404 + dumped_update = proposal_update_schema.dump(update) + return dumped_update, 201 diff --git a/backend/grant/user/models.py b/backend/grant/user/models.py index f7b0aba6..53a7ff50 100644 --- a/backend/grant/user/models.py +++ b/backend/grant/user/models.py @@ -1,3 +1,4 @@ +from sqlalchemy import func from grant.comment.models import Comment from grant.email.models import EmailVerification from grant.extensions import ma, db @@ -80,13 +81,13 @@ class User(db.Model): return user @staticmethod - def get_by_email_or_account_address(email_address: str = None, account_address: str = None): + def get_by_identifier(email_address: str = None, account_address: str = None): if not email_address and not account_address: raise ValueError("Either email_address or account_address is required to get a user") return User.query.filter( - (User.account_address == account_address) | - (User.email_address == email_address) + (func.lower(User.account_address) == func.lower(account_address)) | + (func.lower(User.email_address) == func.lower(email_address)) ).first() class UserSchema(ma.Schema): diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index e81a68c7..d7b858f9 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -4,7 +4,7 @@ from flask_yoloapi import endpoint, parameter from .models import User, SocialMedia, Avatar, users_schema, user_schema, db from grant.proposal.models import Proposal, proposal_team -from grant.utils.auth import requires_sm, verify_signed_auth, BadSignatureException +from grant.utils.auth import requires_sm, requires_same_user_auth, verify_signed_auth, BadSignatureException blueprint = Blueprint('user', __name__, url_prefix='/api/v1/users') @@ -35,7 +35,7 @@ def get_me(): @blueprint.route("/", methods=["GET"]) @endpoint.api() def get_user(user_identity): - user = User.get_by_email_or_account_address(email_address=user_identity, account_address=user_identity) + user = User.get_by_identifier(email_address=user_identity, account_address=user_identity) if user: result = user_schema.dump(user) return result @@ -61,7 +61,7 @@ def create_user( signed_message, raw_typed_data ): - existing_user = User.get_by_email_or_account_address(email_address=email_address, account_address=account_address) + existing_user = User.get_by_identifier(email_address=email_address, account_address=account_address) if existing_user: return {"message": "User with that address or email already exists"}, 409 @@ -95,7 +95,7 @@ def create_user( parameter('rawTypedData', type=str, required=True) ) def auth_user(account_address, signed_message, raw_typed_data): - existing_user = User.get_by_email_or_account_address(account_address=account_address) + existing_user = User.get_by_identifier(account_address=account_address) if not existing_user: return {"message": "No user exists with that address"}, 400 @@ -114,6 +114,7 @@ def auth_user(account_address, signed_message, raw_typed_data): return user_schema.dump(existing_user) @blueprint.route("/", methods=["PUT"]) +@requires_same_user_auth @endpoint.api( parameter('displayName', type=str, required=False), parameter('title', type=str, required=False), @@ -121,10 +122,13 @@ def auth_user(account_address, signed_message, raw_typed_data): parameter('avatar', type=dict, required=False), ) def update_user(user_identity, display_name, title, social_medias, avatar): - user = User.get_by_email_or_account_address(email_address=user_identity, account_address=user_identity) + user = User.get_by_identifier(email_address=user_identity, account_address=user_identity) if not user: return {"message": "User with that address or email not found"}, 404 + if user.id != g.current_user.id: + return {"message": "You are not authorized to edit this user"}, 403 + if display_name is not None: user.display_name = display_name diff --git a/backend/grant/utils/auth.py b/backend/grant/utils/auth.py index 7cf47de3..9ea6e30d 100644 --- a/backend/grant/utils/auth.py +++ b/backend/grant/utils/auth.py @@ -9,6 +9,7 @@ from itsdangerous import TimedJSONWebSignatureSerializer as Serializer from grant.settings import SECRET_KEY, AUTH_URL from ..user.models import User +from ..proposal.models import Proposal TWO_WEEKS = 1209600 @@ -66,6 +67,7 @@ def requires_auth(f): return decorated +# Decorator that requires you to have EIP-712 message signature headers for auth def requires_sm(f): @wraps(f) def decorated(*args, **kwargs): @@ -79,7 +81,7 @@ def requires_sm(f): except BadSignatureException: return jsonify(message="Invalid auth message signature"), 401 - user = User.get_by_email_or_account_address(account_address=auth_address) + user = User.get_by_identifier(account_address=auth_address) if not user: return jsonify(message="No user exists with address: {}".format(auth_address)), 401 @@ -89,3 +91,39 @@ def requires_sm(f): return jsonify(message="Authentication is required to access this resource"), 401 return decorated + +# Decorator that requires you to be the user you're interacting with +def requires_same_user_auth(f): + @wraps(f) + def decorated(*args, **kwargs): + user_identity = kwargs["user_identity"] + if not user_identity: + return jsonify(message="Decorator requires_same_user_auth requires path variable "), 500 + + user = User.get_by_identifier(account_address=user_identity, email_address=user_identity) + if user != g.current_user: + return jsonify(message="You are not authorized to modify this user"), 403 + + return f(*args, **kwargs) + + return requires_sm(decorated) + +# Decorator that requires you to be a team member of a proposal to access +def requires_team_member_auth(f): + @wraps(f) + def decorated(*args, **kwargs): + proposal_id = kwargs["proposal_id"] + if not proposal_id: + return jsonify(message="Decorator requires_team_member_auth requires path variable "), 500 + + proposal = Proposal.query.filter_by(id=proposal_id).first() + if not proposal: + return jsonify(message="No proposal exists with id: {}".format(proposal_id)), 404 + + if not g.current_user in proposal.team: + return jsonify(message="You are not authorized to modify this proposal"), 403 + + g.current_proposal = proposal + return f(*args, **kwargs) + + return requires_sm(decorated) \ No newline at end of file diff --git a/backend/tests/user/test_user_api.py b/backend/tests/user/test_user_api.py index fa0b0af6..14c91b30 100644 --- a/backend/tests/user/test_user_api.py +++ b/backend/tests/user/test_user_api.py @@ -158,7 +158,7 @@ class TestAPI(BaseTestConfig): ) # User - user_db = User.get_by_email_or_account_address(account_address=team[0]["accountAddress"]) + user_db = User.get_by_identifier(account_address=team[0]["accountAddress"]) self.assertEqual(user_db.display_name, team[0]["displayName"]) self.assertEqual(user_db.title, team[0]["title"]) self.assertEqual(user_db.account_address, team[0]["accountAddress"]) diff --git a/frontend/client/store/configure.tsx b/frontend/client/store/configure.tsx index 09466a26..13daf97e 100644 --- a/frontend/client/store/configure.tsx +++ b/frontend/client/store/configure.tsx @@ -6,6 +6,7 @@ import { composeWithDevTools } from 'redux-devtools-extension'; import { persistStore, Persistor } from 'redux-persist'; import rootReducer, { AppState, combineInitialState } from './reducers'; import rootSaga from './sagas'; +import axios from 'api/axios'; const sagaMiddleware = createSagaMiddleware(); @@ -43,5 +44,24 @@ export function configureStore(initialState: Partial = combineInitialS } } + // Any global listeners to the store go here + let prevState = store.getState(); + store.subscribe(() => { + const state = store.getState(); + + // Setup the API with auth credentials whenever they change + const { authSignature } = state.auth; + if (authSignature !== prevState.auth.authSignature) { + axios.defaults.headers.common.MsgSignature = authSignature + ? authSignature.signedMessage + : undefined; + axios.defaults.headers.common.RawTypedData = authSignature + ? JSON.stringify(authSignature.rawTypedData) + : undefined; + } + + prevState = state; + }); + return { store, persistor }; } From 6000d015fff478ffdf8b5ae46fea9c5492217331 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Fri, 9 Nov 2018 14:54:04 -0500 Subject: [PATCH 02/32] UI for adding by address. --- .../client/components/CreateFlow/Team.less | 93 ++++--- .../client/components/CreateFlow/Team.tsx | 107 ++++++-- .../components/CreateFlow/TeamMember.less | 1 + .../components/CreateFlow/TeamMember.tsx | 242 +++--------------- frontend/client/utils/validators.ts | 4 + 5 files changed, 178 insertions(+), 269 deletions(-) diff --git a/frontend/client/components/CreateFlow/Team.less b/frontend/client/components/CreateFlow/Team.less index 76916d1a..c067f740 100644 --- a/frontend/client/components/CreateFlow/Team.less +++ b/frontend/client/components/CreateFlow/Team.less @@ -6,49 +6,76 @@ width: 100%; margin: 0 auto; + &-pending, &-add { - display: flex; - width: 100%; - padding: 1rem; - align-items: center; - cursor: pointer; - opacity: 0.7; - transition: opacity 80ms ease, transform 80ms ease; - outline: none; + margin-top: 2rem; - &:hover, - &:focus { - opacity: 1; - } - &:active { - transform: translateY(2px); + &-title { + font-size: 1.2rem; + margin-bottom: 0.5rem; + padding-left: 0.25rem; } + } - &-icon { + &-pending { + &-invite { display: flex; + justify-content: space-between; align-items: center; - justify-content: center; - margin-right: 1.25rem; - width: 7.4rem; - height: 7.4rem; - border: 2px dashed @success-color; - color: @success-color; - border-radius: 8px; - font-size: 2rem; - } + padding: 1rem; + font-size: 1rem; + background: #FFF; + box-shadow: 0 1px 2px rgba(#000, 0.2); + border-bottom: 1px solid rgba(#000, 0.05); - &-text { - text-align: left; - - &-title { - font-size: 1.6rem; - font-weight: 300; - color: @success-color; + &:first-child { + border-top-left-radius: 2px; + border-top-right-radius: 2px; } - &-subtitle { - opacity: 0.7; + &:last-child { + border-bottom-left-radius: 2px; + border-bottom-right-radius: 2px; + border-bottom: 0; + } + + &-delete { + opacity: 0.3; + outline: none; font-size: 1rem; + padding: 0 0.25rem; + transition: opacity 100ms ease, color 100ms ease; + + &:hover, + &:focus, + &:active { + color: @error-color; + opacity: 1; + } + } + } + } + + &-add { + &-form { + display: flex; + padding: 1rem 1rem 0.3rem; + border-radius: 2px; + background: #FFF; + box-shadow: 0 1px 2px rgba(#000, 0.2); + + &-field { + flex: 1; + + .ant-form-explain { + margin-top: 0.3rem; + padding-left: 0.25rem; + font-size: 0.75rem; + } + } + + &-submit { + margin-left: 0.5rem; } } } diff --git a/frontend/client/components/CreateFlow/Team.tsx b/frontend/client/components/CreateFlow/Team.tsx index 885b4da4..56bc6710 100644 --- a/frontend/client/components/CreateFlow/Team.tsx +++ b/frontend/client/components/CreateFlow/Team.tsx @@ -1,13 +1,16 @@ import React from 'react'; import { connect } from 'react-redux'; -import { Icon } from 'antd'; +import { Icon, Form, Input, Button, Popconfirm } from 'antd'; import { CreateFormState, TeamMember } from 'types'; import TeamMemberComponent from './TeamMember'; -import './Team.less'; +import { isValidEthAddress, isValidEmail } from 'utils/validators'; import { AppState } from 'store/reducers'; +import './Team.less'; interface State { team: TeamMember[]; + teamInvites: string[]; + invite: string; } interface StateProps { @@ -33,6 +36,8 @@ const DEFAULT_STATE: State = { socialAccounts: {}, }, ], + teamInvites: [], + invite: '', }; class CreateFlowTeam extends React.Component { @@ -60,7 +65,13 @@ class CreateFlowTeam extends React.Component { } render() { - const { team } = this.state; + const { team, teamInvites, invite } = this.state; + const inviteError = + invite && !isValidEmail(invite) && !isValidEthAddress(invite) + ? 'That doesn’t look like an email address or ETH address' + : undefined; + const inviteDisabled = !!inviteError || !invite; + return (
{team.map((user, idx) => ( @@ -68,39 +79,76 @@ class CreateFlowTeam extends React.Component { key={idx} index={idx} user={user} - initialEditingState={!user.name} - onChange={this.handleChange} onRemove={this.removeMember} /> ))} - {team.length < MAX_TEAM_SIZE && ( - +
- - + ))} + + )} + {team.length < MAX_TEAM_SIZE && ( +
+

Add a team member

+
+ + + + +
+
)} ); } - private handleChange = (user: TeamMember, idx: number) => { - const team = [...this.state.team]; - team[idx] = user; - this.setState({ team }); - this.props.updateForm({ team }); + private handleChangeInvite = (ev: React.ChangeEvent) => { + this.setState({ invite: ev.currentTarget.value }); }; - private addMember = () => { - const team = [...this.state.team, { ...DEFAULT_STATE.team[0] }]; - this.setState({ team }); - this.props.updateForm({ team }); + private handleAddSubmit = (ev: React.FormEvent) => { + ev.preventDefault(); + const teamInvites = [...this.state.teamInvites, this.state.invite]; + this.setState({ + teamInvites, + invite: '', + }); + this.props.updateForm({ teamInvites }); }; private removeMember = (index: number) => { @@ -111,6 +159,15 @@ class CreateFlowTeam extends React.Component { this.setState({ team }); this.props.updateForm({ team }); }; + + private removeInvitation = (index: number) => { + const teamInvites = [ + ...this.state.teamInvites.slice(0, index), + ...this.state.teamInvites.slice(index + 1), + ]; + this.setState({ teamInvites }); + this.props.updateForm({ teamInvites }); + }; } const withConnect = connect(state => ({ diff --git a/frontend/client/components/CreateFlow/TeamMember.less b/frontend/client/components/CreateFlow/TeamMember.less index 41ea2256..3b23f3fe 100644 --- a/frontend/client/components/CreateFlow/TeamMember.less +++ b/frontend/client/components/CreateFlow/TeamMember.less @@ -6,6 +6,7 @@ align-items: center; padding: 1rem; margin: 0 auto 1rem; + border-radius: 2px; background: #FFF; box-shadow: 0 1px 2px rgba(#000, 0.2); diff --git a/frontend/client/components/CreateFlow/TeamMember.tsx b/frontend/client/components/CreateFlow/TeamMember.tsx index 15ad6869..903f8356 100644 --- a/frontend/client/components/CreateFlow/TeamMember.tsx +++ b/frontend/client/components/CreateFlow/TeamMember.tsx @@ -1,240 +1,60 @@ import React from 'react'; import classnames from 'classnames'; -import { Input, Form, Col, Row, Button, Icon, Alert } from 'antd'; +import { Icon } from 'antd'; import { SOCIAL_INFO } from 'utils/social'; -import { SOCIAL_TYPE, TeamMember } from 'types'; -import { getCreateTeamMemberError } from 'modules/create/utils'; +import { TeamMember } from 'types'; import UserAvatar from 'components/UserAvatar'; import './TeamMember.less'; interface Props { index: number; user: TeamMember; - initialEditingState?: boolean; - onChange(user: TeamMember, index: number): void; onRemove(index: number): void; } -interface State { - fields: TeamMember; - isEditing: boolean; -} - -export default class CreateFlowTeamMember extends React.PureComponent { - state: State = { - fields: { ...this.props.user }, - isEditing: this.props.initialEditingState || false, - }; - +export default class CreateFlowTeamMember extends React.PureComponent { render() { const { user, index } = this.props; - const { fields, isEditing } = this.state; - const error = getCreateTeamMemberError(fields); - const isMissingField = - !fields.name || !fields.title || !fields.emailAddress || !fields.ethAddress; - const isDisabled = !!error || isMissingField; return ( -
+
- - {isEditing && ( - - )} +
- {isEditing ? ( -
- - - - - - - - - - - - {user.name || No name}
+
{user.title || No title}
+
+ {Object.values(SOCIAL_INFO).map(s => { + const account = user.socialAccounts[s.type]; + const cn = classnames( + 'TeamMember-info-social-icon', + account && 'is-active', + ); + return ( +
+ {s.icon} + {account && ( + - - - - - - - - - - - {Object.values(SOCIAL_INFO).map(s => ( - - - this.handleSocialChange(ev, s.type)} - addonBefore={s.icon} - /> - - - ))} - - - {!isMissingField && - error && ( - - )} - - - - - - - ) : ( - <> -
{user.name || No name}
-
- {user.title || No title} -
-
- {Object.values(SOCIAL_INFO).map(s => { - const account = user.socialAccounts[s.type]; - const cn = classnames( - 'TeamMember-info-social-icon', - account && 'is-active', - ); - return ( -
- {s.icon} - {account && ( - - )} -
- ); - })} -
- {index !== 0 && ( - <> - - - - )} - + )} +
+ ); + })} +
+ {index !== 0 && ( + )}
); } - private toggleEditing = (ev?: React.SyntheticEvent) => { - if (ev) { - ev.preventDefault(); - } - - const { isEditing, fields } = this.state; - if (isEditing) { - // TODO: Check if valid first - this.props.onChange(fields, this.props.index); - } - - this.setState({ isEditing: !isEditing }); - }; - - private cancelEditing = () => { - this.setState({ - isEditing: false, - fields: { ...this.props.user }, - }); - }; - - private handleChangeField = (ev: React.ChangeEvent) => { - const { name, value } = ev.currentTarget; - this.setState({ - fields: { - ...this.state.fields, - [name as any]: value, - }, - }); - }; - - private handleSocialChange = ( - ev: React.ChangeEvent, - type: SOCIAL_TYPE, - ) => { - const { value } = ev.currentTarget; - this.setState({ - fields: { - ...this.state.fields, - socialAccounts: { - ...this.state.fields.socialAccounts, - [type]: value, - }, - }, - }); - }; - - private handleChangePhoto = () => { - // TODO: Actual file uploading - const gender = ['men', 'women'][Math.floor(Math.random() * 2)]; - const num = Math.floor(Math.random() * 80); - this.setState({ - fields: { - ...this.state.fields, - avatarUrl: `https://randomuser.me/api/portraits/${gender}/${num}.jpg`, - }, - }); - }; - private removeMember = () => { this.props.onRemove(this.props.index); }; diff --git a/frontend/client/utils/validators.ts b/frontend/client/utils/validators.ts index 5952dd3f..3e2875a2 100644 --- a/frontend/client/utils/validators.ts +++ b/frontend/client/utils/validators.ts @@ -29,3 +29,7 @@ export function isValidEthAddress(addr: string): boolean { return addr === toChecksumAddress(addr); } } + +export function isValidEmail(email: string): boolean { + return /\S+@\S+\.\S+/.test(email); +} From 829d072b8c45a18131899c181df36328ed2c2e7c Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Tue, 13 Nov 2018 11:07:09 -0500 Subject: [PATCH 03/32] Check in work on proposals, drafts --- backend/grant/milestone/models.py | 6 + backend/grant/proposal/models.py | 92 +++++-- backend/grant/proposal/views.py | 247 ++++++++++++------ backend/grant/user/views.py | 9 +- backend/grant/utils/exceptions.py | 2 + backend/migrations/versions/7e39b9773390_.py | 55 ++++ frontend/client/Routes.tsx | 14 + frontend/client/api/api.ts | 10 +- .../client/components/CreateFlow/index.tsx | 35 +-- .../client/components/DraftList/index.tsx | 4 + .../client/components/DraftList/style.less | 0 frontend/client/index.tsx | 5 +- frontend/client/modules/create/actions.ts | 51 ++-- frontend/client/modules/create/index.ts | 3 +- frontend/client/modules/create/reducers.ts | 55 ++-- frontend/client/modules/create/sagas.ts | 30 +++ frontend/client/modules/create/types.ts | 19 +- frontend/client/pages/create.tsx | 64 ++++- frontend/client/pages/proposal-edit.tsx | 19 ++ frontend/client/store/configure.tsx | 9 +- frontend/client/store/history.ts | 11 + frontend/client/store/reducers.tsx | 6 +- frontend/client/store/sagas.ts | 2 + frontend/client/typings/saga-helpers.d.ts | 24 ++ frontend/package.json | 2 + frontend/types/proposal.ts | 11 + frontend/yarn.lock | 13 +- 27 files changed, 572 insertions(+), 226 deletions(-) create mode 100644 backend/grant/utils/exceptions.py create mode 100644 backend/migrations/versions/7e39b9773390_.py create mode 100644 frontend/client/components/DraftList/index.tsx create mode 100644 frontend/client/components/DraftList/style.less create mode 100644 frontend/client/modules/create/sagas.ts create mode 100644 frontend/client/pages/proposal-edit.tsx create mode 100644 frontend/client/store/history.ts create mode 100644 frontend/client/typings/saga-helpers.d.ts diff --git a/backend/grant/milestone/models.py b/backend/grant/milestone/models.py index 7710b245..ed91b39f 100644 --- a/backend/grant/milestone/models.py +++ b/backend/grant/milestone/models.py @@ -1,6 +1,7 @@ import datetime from grant.extensions import ma, db +from grant.utils.exceptions import ValidationException NOT_REQUESTED = 'NOT_REQUESTED' ONGOING_VOTE = 'ONGOING_VOTE' @@ -42,6 +43,11 @@ class Milestone(db.Model): self.immediate_payout = immediate_payout self.proposal_id = proposal_id self.date_created = datetime.datetime.now() + + @staticmethod + def validate(milestone): + if len(milestone.title) > 60: + raise ValidationException("Milestone title must be no more than 60 chars") class MilestoneSchema(ma.Schema): diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index b523f7e1..7511d032 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -1,8 +1,16 @@ import datetime +from typing import List from grant.comment.models import Comment from grant.extensions import ma, db from grant.utils.misc import dt_to_unix +from grant.utils.exceptions import ValidationException + +DRAFT = 'DRAFT' +PENDING = 'PENDING' +LIVE = 'LIVE' +DELETED = 'DELETED' +STATUSES = [DRAFT, PENDING, LIVE, DELETED] FUNDING_REQUIRED = 'FUNDING_REQUIRED' COMPLETED = 'COMPLETED' @@ -17,10 +25,6 @@ ACCESSIBILITY = "ACCESSIBILITY" CATEGORIES = [DAPP, DEV_TOOL, CORE_DEV, COMMUNITY, DOCUMENTATION, ACCESSIBILITY] -class ValidationException(Exception): - pass - - proposal_team = db.Table( 'proposal_team', db.Model.metadata, db.Column('user_id', db.Integer, db.ForeignKey('user.id')), @@ -51,12 +55,23 @@ class Proposal(db.Model): id = db.Column(db.Integer(), primary_key=True) date_created = db.Column(db.DateTime) + # Database info + status = db.Column(db.String(255), nullable=False) title = db.Column(db.String(255), nullable=False) - proposal_address = db.Column(db.String(255), unique=True, nullable=False) + brief = db.Column(db.String(255), nullable=False) stage = db.Column(db.String(255), nullable=False) content = db.Column(db.Text, nullable=False) category = db.Column(db.String(255), nullable=False) + # Contract info + target = db.Column(db.BigInteger, nullable=False) + payout_address = db.Column(db.String(255), nullable=False) + trustees = db.Column(db.String(1024), nullable=False) + deadline_duration = db.Column(db.Integer(), nullable=False) + vote_duration = db.Column(db.Integer(), nullable=False) + proposal_address = db.Column(db.String(255), unique=True, nullable=True) + + # Relations team = db.relationship("User", secondary=proposal_team) comments = db.relationship(Comment, backref="proposal", lazy=True) updates = db.relationship(ProposalUpdate, backref="proposal", lazy=True) @@ -64,38 +79,67 @@ class Proposal(db.Model): def __init__( self, - stage: str, - proposal_address: str, - title: str, - content: str, - category: str + status: str = 'DRAFT', + title: str = '', + brief: str = '', + content: str = '', + stage: str = '', + target: str = '0', + payout_address: str = '', + trustees: List[str] = [], + deadline_duration: int = 5184000, # 60 days + vote_duration: int = 604800, # 7 days + proposal_address: str = None, + category: str = '' ): - self.stage = stage - self.proposal_address = proposal_address + self.date_created = datetime.datetime.now() + self.status = status self.title = title + self.brief = brief self.content = content self.category = category - self.date_created = datetime.datetime.now() + self.target = target + self.payout_address = payout_address + self.trustees = ','.join(trustees) + self.proposal_address = proposal_address + self.deadline_duration = deadline_duration + self.vote_duration = vote_duration + self.stage = stage @staticmethod - def validate( - stage: str, - proposal_address: str, - title: str, - content: str, - category: str): - if stage not in PROPOSAL_STAGES: - raise ValidationException("{} not in {}".format(stage, PROPOSAL_STAGES)) - if category not in CATEGORIES: - raise ValidationException("{} not in {}".format(category, CATEGORIES)) + def validate(proposal): + title = proposal.get('title') + stage = proposal.get('stage') + category = proposal.get('category') + if title and len(title) > 60: + raise ValidationException("Proposal title cannot be longer than 60 characters") + if stage and stage not in PROPOSAL_STAGES: + raise ValidationException("Proposal stage {} not in {}".format(stage, PROPOSAL_STAGES)) + if category and category not in CATEGORIES: + raise ValidationException("Category {} not in {}".format(category, CATEGORIES)) @staticmethod def create(**kwargs): - Proposal.validate(**kwargs) + Proposal.validate(kwargs) return Proposal( **kwargs ) + def publish(self): + # Require certain fields + if not self.title: + raise ValidationException("Proposal must have a title") + if not self.content: + raise ValidationException("Proposal must have content") + if not self.proposal_address: + raise ValidationException("Proposal must a contract address") + + # Then run through regular validation + Proposal.validate(vars(self)) + self.status = 'LIVE' + + + class ProposalSchema(ma.Schema): class Meta: diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index af64e266..16797a75 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -9,7 +9,8 @@ from grant.comment.models import Comment, comment_schema from grant.milestone.models import Milestone from grant.user.models import User, SocialMedia, Avatar from grant.utils.auth import requires_sm, requires_team_member_auth -from .models import Proposal, proposals_schema, proposal_schema, ProposalUpdate, proposal_update_schema, db +from grant.utils.exceptions import ValidationException +from .models import Proposal, proposals_schema, proposal_schema, ProposalUpdate, proposal_update_schema, proposal_team, db blueprint = Blueprint("proposal", __name__, url_prefix="/api/v1/proposals") @@ -68,7 +69,7 @@ def post_proposal_comments(proposal_id, user_id, content): def get_proposals(stage): if stage: proposals = ( - Proposal.query.filter_by(stage=stage) + Proposal.query.filter_by(status="LIVE", stage=stage) .order_by(Proposal.date_created.desc()) .all() ) @@ -77,86 +78,180 @@ def get_proposals(stage): dumped_proposals = proposals_schema.dump(proposals) return dumped_proposals - -@blueprint.route("/", methods=["POST"]) +@blueprint.route("/drafts", methods=["POST"]) @requires_sm -@endpoint.api( - parameter('crowdFundContractAddress', type=str, required=True), - parameter('content', type=str, required=True), - parameter('title', type=str, required=True), - parameter('milestones', type=list, required=True), - parameter('category', type=str, required=True), - parameter('team', type=list, required=True) -) -def make_proposal(crowd_fund_contract_address, content, title, milestones, category, team): - from grant.user.models import User - existing_proposal = Proposal.query.filter_by(proposal_address=crowd_fund_contract_address).first() - if existing_proposal: - return {"message": "Oops! Something went wrong."}, 409 - - proposal = Proposal.create( - stage="FUNDING_REQUIRED", - proposal_address=crowd_fund_contract_address, - content=content, - title=title, - category=category - ) - +@endpoint.api() +def make_proposal_draft(): + proposal = Proposal.create(status="DRAFT") + proposal.team.append(g.current_user) db.session.add(proposal) + db.session.commit() + return proposal_schema.dump(proposal), 201 - if not len(team) > 0: - return {"message": "Team must be at least 1"}, 400 - - for team_member in team: - account_address = team_member.get("accountAddress") - display_name = team_member.get("displayName") - email_address = team_member.get("emailAddress") - title = team_member.get("title") - user = User.query.filter( - (User.account_address == account_address) | (User.email_address == email_address)).first() - if not user: - user = User( - account_address=account_address, - email_address=email_address, - display_name=display_name, - title=title - ) - db.session.add(user) - db.session.flush() - - avatar_data = team_member.get("avatar") - if avatar_data: - avatar = Avatar(image_url=avatar_data.get('link'), user_id=user.id) - db.session.add(avatar) - - social_medias = team_member.get("socialMedias") - if social_medias: - for social_media in social_medias: - sm = SocialMedia(social_media_link=social_media.get("link"), user_id=user.id) - db.session.add(sm) - - proposal.team.append(user) - - for each_milestone in milestones: - m = Milestone( - title=each_milestone["title"], - content=each_milestone["description"], - date_estimated=datetime.strptime(each_milestone["date"], '%B %Y'), - payout_percent=str(each_milestone["payoutPercent"]), - immediate_payout=each_milestone["immediatePayout"], - proposal_id=proposal.id - ) - - db.session.add(m) +@blueprint.route("/drafts", methods=["GET"]) +@requires_sm +@endpoint.api() +def get_proposal_drafts(): + print(g.current_user.id) + proposals = ( + Proposal.query + .filter_by(status="DRAFT") + .join(proposal_team) + .filter(proposal_team.c.user_id == g.current_user.id) + .order_by(Proposal.date_created.desc()) + .all() + ) + return proposals_schema.dump(proposals), 200 +@blueprint.route("/", methods=["PUT"]) +@requires_team_member_auth +@endpoint.api( + parameter('title', type=str), + parameter('brief', type=str), + parameter('category', type=str), + parameter('content', type=str), + parameter('target', type=str), + parameter('payoutAddress', type=str), + parameter('trustees', type=list), + parameter('deadlineDuration', type=int), + parameter('voteDuration', type=int), + parameter('milestones', type=list) +) +def update_proposal(milestones, trustees, **kwargs): + # Update the base proposal fields + for key, value in kwargs.items(): + g.current_proposal[key] = value + if trustees: + g.current_proposal.trustees = ','.join(trustees) try: - db.session.commit() - except IntegrityError as e: - print(e) - return {"message": "Oops! Something went wrong."}, 409 + Proposal.validate(g.current_proposal) + except ValidationException as e: + return {"message": "Invalid proposal parameters: {}".format(str(e))}, 400 + db.session.add(g.current_proposal) - results = proposal_schema.dump(proposal) - return results, 201 + # Delete & re-add milestones + db.session.delete(g.current_proposal.milestones) + if milestones: + for mdata in milestones: + m = Milestone( + title=mdata["title"], + content=mdata["description"], + date_estimated=datetime.strptime(mdata["date"], '%B %Y'), + payout_percent=str(mdata["payoutPercent"]), + immediate_payout=mdata["immediatePayout"], + proposal_id=g.current_proposal.id + ) + db.session.add(m) + + # Commit + db.session.commit() + return proposal_schema.dump(g.current_proposal), 200 + +@blueprint.route("/", methods=["PUT"]) +@requires_team_member_auth +@endpoint.api() +def delete_proposal_draft(): + if g.current_proposal.status != 'DRAFT': + return {"message": "Cannot delete non-draft proposals"}, 400 + db.session.delete(g.current_proposal) + db.session.commit() + return None, 202 + +@blueprint.route("//publish", methods=["PUT"]) +@requires_team_member_auth +@endpoint.api( + parameter('contractAddress', type=str, required=True) +) +def publish_proposal(contract_address): + try: + g.current_proposal.proposal_address = contract_address + g.current_proposal.publish() + except ValidationException as e: + return {"message": "Invalid proposal parameters: {}".format(str(e))}, 400 + db.session.add(g.current_proposal) + db.session.commit() + return proposal_schema.dump(g.current_proposal), 200 + + +# @blueprint.route("/", methods=["POST"]) +# @requires_sm +# @endpoint.api( +# parameter('crowdFundContractAddress', type=str, required=True), +# parameter('content', type=str, required=True), +# parameter('title', type=str, required=True), +# parameter('milestones', type=list, required=True), +# parameter('category', type=str, required=True), +# parameter('team', type=list, required=True) +# ) +# def make_proposal(crowd_fund_contract_address, content, title, milestones, category, team): +# from grant.user.models import User +# existing_proposal = Proposal.query.filter_by(proposal_address=crowd_fund_contract_address).first() +# if existing_proposal: +# return {"message": "Oops! Something went wrong."}, 409 + +# proposal = Proposal.create( +# stage="FUNDING_REQUIRED", +# proposal_address=crowd_fund_contract_address, +# content=content, +# title=title, +# category=category +# ) + +# db.session.add(proposal) + +# if not len(team) > 0: +# return {"message": "Team must be at least 1"}, 400 + +# for team_member in team: +# account_address = team_member.get("accountAddress") +# display_name = team_member.get("displayName") +# email_address = team_member.get("emailAddress") +# title = team_member.get("title") +# user = User.query.filter( +# (User.account_address == account_address) | (User.email_address == email_address)).first() +# if not user: +# user = User( +# account_address=account_address, +# email_address=email_address, +# display_name=display_name, +# title=title +# ) +# db.session.add(user) +# db.session.flush() + +# avatar_data = team_member.get("avatar") +# if avatar_data: +# avatar = Avatar(image_url=avatar_data.get('link'), user_id=user.id) +# db.session.add(avatar) + +# social_medias = team_member.get("socialMedias") +# if social_medias: +# for social_media in social_medias: +# sm = SocialMedia(social_media_link=social_media.get("link"), user_id=user.id) +# db.session.add(sm) + +# proposal.team.append(user) + +# for each_milestone in milestones: +# m = Milestone( +# title=each_milestone["title"], +# content=each_milestone["description"], +# date_estimated=datetime.strptime(each_milestone["date"], '%B %Y'), +# payout_percent=str(each_milestone["payoutPercent"]), +# immediate_payout=each_milestone["immediatePayout"], +# proposal_id=proposal.id +# ) + +# db.session.add(m) + +# try: +# db.session.commit() +# except IntegrityError as e: +# print(e) +# return {"message": "Oops! Something went wrong."}, 409 + +# results = proposal_schema.dump(proposal) +# return results, 201 @blueprint.route("//updates", methods=["GET"]) diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index d7b858f9..6349f1c1 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -18,8 +18,13 @@ def get_users(proposal_id): if not proposal: users = User.query.all() else: - users = User.query.join(proposal_team).join(Proposal) \ - .filter(proposal_team.c.proposal_id == proposal.id).all() + users = ( + User.query + .join(proposal_team) + .join(Proposal) + .filter(proposal_team.c.proposal_id == proposal.id) + .all() + ) result = users_schema.dump(users) return result diff --git a/backend/grant/utils/exceptions.py b/backend/grant/utils/exceptions.py new file mode 100644 index 00000000..a368d55d --- /dev/null +++ b/backend/grant/utils/exceptions.py @@ -0,0 +1,2 @@ +class ValidationException(Exception): + pass \ No newline at end of file diff --git a/backend/migrations/versions/7e39b9773390_.py b/backend/migrations/versions/7e39b9773390_.py new file mode 100644 index 00000000..04f3ba2f --- /dev/null +++ b/backend/migrations/versions/7e39b9773390_.py @@ -0,0 +1,55 @@ +"""empty message + +Revision ID: 7e39b9773390 +Revises: 312db8611967 +Create Date: 2018-11-09 16:39:33.571823 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '7e39b9773390' +down_revision = '312db8611967' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('proposal', sa.Column('brief', sa.String(length=255), nullable=False, server_default="")) + op.add_column('proposal', sa.Column('deadline_duration', sa.Integer(), nullable=False, server_default="5184000")) + op.add_column('proposal', sa.Column('payout_address', sa.String(length=255), nullable=False, server_default="")) + op.add_column('proposal', sa.Column('status', sa.String(length=255), nullable=False, server_default="LIVE")) + op.add_column('proposal', sa.Column('target', sa.BigInteger(), nullable=False, server_default="1")) + op.add_column('proposal', sa.Column('trustees', sa.String(length=1024), nullable=False, server_default="")) + op.add_column('proposal', sa.Column('vote_duration', sa.Integer(), nullable=False, server_default="604800")) + op.alter_column('proposal', 'proposal_address', + existing_type=sa.VARCHAR(length=255), + nullable=True) + # ### end Alembic commands ### + + # Remove default value for new columns + op.alter_column('proposal', 'brief', server_default=None) + op.alter_column('proposal', 'deadline_duration', server_default=None) + op.alter_column('proposal', 'payout_address', server_default=None) + op.alter_column('proposal', 'status', server_default=None) + op.alter_column('proposal', 'target', server_default=None) + op.alter_column('proposal', 'trustees', server_default=None) + op.alter_column('proposal', 'vote_duration', server_default=None) + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.alter_column('proposal', 'proposal_address', + existing_type=sa.VARCHAR(length=255), + nullable=False) + op.drop_column('proposal', 'vote_duration') + op.drop_column('proposal', 'trustees') + op.drop_column('proposal', 'target') + op.drop_column('proposal', 'status') + op.drop_column('proposal', 'payout_address') + op.drop_column('proposal', 'deadline_duration') + op.drop_column('proposal', 'brief') + # ### end Alembic commands ### diff --git a/frontend/client/Routes.tsx b/frontend/client/Routes.tsx index 18cb731c..307d9482 100644 --- a/frontend/client/Routes.tsx +++ b/frontend/client/Routes.tsx @@ -15,6 +15,7 @@ import Template, { TemplateProps } from 'components/Template'; // wrap components in loadable...import & they will be split const Home = loadable(() => import('pages/index')); const Create = loadable(() => import('pages/create')); +const ProposalEdit = loadable(() => import('pages/proposal-edit')); const Proposals = loadable(() => import('pages/proposals')); const Proposal = loadable(() => import('pages/proposal')); const Auth = loadable(() => import('pages/auth')); @@ -64,6 +65,7 @@ const routeConfigs: RouteConfig[] = [ hideFooter: true, requiresWeb3: true, }, + onlyLoggedIn: true, }, { // Browse proposals @@ -77,6 +79,18 @@ const routeConfigs: RouteConfig[] = [ requiresWeb3: true, }, }, + { + // Proposal edit page + route: { + path: '/proposals/:id/edit', + component: ProposalEdit, + }, + template: { + title: 'Edit proposal', + requiresWeb3: true, + }, + onlyLoggedIn: true, + }, { // Proposal detail page route: { diff --git a/frontend/client/api/api.ts b/frontend/client/api/api.ts index 9e7b05b4..0546e432 100644 --- a/frontend/client/api/api.ts +++ b/frontend/client/api/api.ts @@ -1,5 +1,5 @@ import axios from './axios'; -import { Proposal, TeamMember, Update } from 'types'; +import { Proposal, ProposalDraft, TeamMember, Update } from 'types'; import { formatTeamMemberForPost, formatTeamMemberFromGet, @@ -106,3 +106,11 @@ export function postProposalUpdate( content, }); } + +export function getProposalDrafts(): Promise<{ data: ProposalDraft[] }> { + return axios.get('/api/v1/proposals/drafts'); +} + +export function postProposalDraft(): Promise<{ data: ProposalDraft }> { + return axios.post('/api/v1/proposals/drafts'); +} diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index 06b834ec..cc3a5f80 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { compose } from 'recompose'; -import { Steps, Icon, Spin, Alert } from 'antd'; +import { Steps, Icon } from 'antd'; import qs from 'query-string'; import { withRouter, RouteComponentProps } from 'react-router'; import { History } from 'history'; @@ -108,14 +108,10 @@ interface StateProps { form: AppState['create']['form']; isSavingDraft: AppState['create']['isSavingDraft']; hasSavedDraft: AppState['create']['hasSavedDraft']; - isFetchingDraft: AppState['create']['isFetchingDraft']; - hasFetchedDraft: AppState['create']['hasFetchedDraft']; } interface DispatchProps { updateForm: typeof createActions['updateForm']; - resetForm: typeof createActions['resetForm']; - fetchDraft: typeof createActions['fetchDraft']; resetCreateCrowdFund: typeof web3Actions['resetCreateCrowdFund']; } @@ -151,7 +147,6 @@ class CreateFlow extends React.Component { componentDidMount() { this.props.resetCreateCrowdFund(); - this.props.fetchDraft(); } componentWillUnmount() { @@ -161,17 +156,9 @@ class CreateFlow extends React.Component { } render() { - const { isFetchingDraft, isSavingDraft, hasFetchedDraft } = this.props; + const { isSavingDraft } = this.props; const { step, isPreviewing, isPublishing } = this.state; - if (isFetchingDraft && !isPublishing) { - return ( -
- -
- ); - } - const info = STEP_INFO[step]; const currentIndex = STEP_ORDER.indexOf(step); const isLastStep = STEP_ORDER.indexOf(step) === STEP_ORDER.length - 1; @@ -198,20 +185,6 @@ class CreateFlow extends React.Component { /> ))} - {hasFetchedDraft && ( - - We've restored your state from before. If you want to start over,{' '} - click here. - - } - /> - )}

{info.title}

{info.subtitle}
@@ -337,16 +310,12 @@ const withConnect = connect( form: state.create.form, isSavingDraft: state.create.isSavingDraft, hasSavedDraft: state.create.hasSavedDraft, - isFetchingDraft: state.create.isFetchingDraft, - hasFetchedDraft: state.create.hasFetchedDraft, crowdFundLoading: state.web3.crowdFundLoading, crowdFundError: state.web3.crowdFundError, crowdFundCreatedAddress: state.web3.crowdFundCreatedAddress, }), { updateForm: createActions.updateForm, - resetForm: createActions.resetForm, - fetchDraft: createActions.fetchDraft, resetCreateCrowdFund: web3Actions.resetCreateCrowdFund, }, ); diff --git a/frontend/client/components/DraftList/index.tsx b/frontend/client/components/DraftList/index.tsx new file mode 100644 index 00000000..c16a9043 --- /dev/null +++ b/frontend/client/components/DraftList/index.tsx @@ -0,0 +1,4 @@ +import React from 'react'; +import { connect } from 'react-redux'; + +export default class DraftList extends React.Component< \ No newline at end of file diff --git a/frontend/client/components/DraftList/style.less b/frontend/client/components/DraftList/style.less new file mode 100644 index 00000000..e69de29b diff --git a/frontend/client/index.tsx b/frontend/client/index.tsx index a256f3cc..d3fcff61 100644 --- a/frontend/client/index.tsx +++ b/frontend/client/index.tsx @@ -4,10 +4,11 @@ import { hot } from 'react-hot-loader'; import { hydrate } from 'react-dom'; import { loadComponents } from 'loadable-components'; import { Provider } from 'react-redux'; -import { BrowserRouter as Router } from 'react-router-dom'; +import { Router } from 'react-router-dom'; import { PersistGate } from 'redux-persist/integration/react'; import { I18nextProvider } from 'react-i18next'; import { configureStore } from 'store/configure'; +import history from 'store/history'; import Routes from './Routes'; import i18n from './i18n'; @@ -21,7 +22,7 @@ const App = hot(module)(() => ( - + diff --git a/frontend/client/modules/create/actions.ts b/frontend/client/modules/create/actions.ts index 38b42a9b..b04e1f6f 100644 --- a/frontend/client/modules/create/actions.ts +++ b/frontend/client/modules/create/actions.ts @@ -1,10 +1,11 @@ import { Dispatch } from 'redux'; import { CreateFormState } from 'types'; -import types from './types'; +import { getProposalDrafts } from 'api/api'; import { sleep } from 'utils/helpers'; import { AppState } from 'store/reducers'; import { createCrowdFund } from 'modules/web3/actions'; import { formToBackendData, formToContractData } from './utils'; +import types, { CreateDraftOptions } from './types'; type GetState = () => AppState; @@ -21,23 +22,11 @@ export function updateForm(form: Partial) { }; } -export function resetForm() { - return async (dispatch: Dispatch) => { - // TODO: Replace with server side reset - localStorage.removeItem(LS_DRAFT_KEY); - await sleep(100); - - // Re-run fetch draft to ensure we've reset state - dispatch({ type: types.RESET_FORM }); - dispatch(fetchDraft()); - }; -} - export function saveDraft() { return async (dispatch: Dispatch, getState: GetState) => { const { form } = getState().create; dispatch({ type: types.SAVE_DRAFT_PENDING }); - await sleep(100); + await sleep(1000); // TODO: Replace with server side save localStorage.setItem(LS_DRAFT_KEY, JSON.stringify(form)); @@ -45,27 +34,21 @@ export function saveDraft() { }; } -export function fetchDraft() { - return async (dispatch: Dispatch) => { - dispatch({ type: types.FETCH_DRAFT_PENDING }); - await sleep(200); +export function fetchDrafts() { + return (dispatch: Dispatch) => { + return dispatch({ + type: types.FETCH_DRAFTS, + payload: getProposalDrafts(), + }); + }; +} - // TODO: Replace with server side fetch - const formJson = localStorage.getItem(LS_DRAFT_KEY); - try { - const form = formJson ? JSON.parse(formJson) : null; - dispatch({ - type: types.FETCH_DRAFT_FULFILLED, - payload: form, - }); - } catch (err) { - localStorage.removeItem(LS_DRAFT_KEY); - dispatch({ - type: types.FETCH_DRAFT_REJECTED, - payload: 'Malformed form JSON', - error: true, - }); - } + + +export function createDraft(opts: CreateDraftOptions = {}) { + return { + type: types.CREATE_DRAFT_PENDING, + payload: opts, }; } diff --git a/frontend/client/modules/create/index.ts b/frontend/client/modules/create/index.ts index d2ba4348..eb09007e 100644 --- a/frontend/client/modules/create/index.ts +++ b/frontend/client/modules/create/index.ts @@ -1,7 +1,8 @@ import reducers, { CreateState, INITIAL_STATE } from './reducers'; import * as createActions from './actions'; import * as createTypes from './types'; +import createSagas from './sagas'; -export { createActions, createTypes, CreateState, INITIAL_STATE }; +export { createActions, createTypes, createSagas, CreateState, INITIAL_STATE }; export default reducers; diff --git a/frontend/client/modules/create/reducers.ts b/frontend/client/modules/create/reducers.ts index fa83d8bc..22f24ba0 100644 --- a/frontend/client/modules/create/reducers.ts +++ b/frontend/client/modules/create/reducers.ts @@ -1,20 +1,22 @@ import types from './types'; -import { CreateFormState } from 'types'; +import { CreateFormState, ProposalDraft } from 'types'; import { ONE_DAY } from 'utils/time'; export interface CreateState { + drafts: ProposalDraft[] | null; form: CreateFormState; isSavingDraft: boolean; hasSavedDraft: boolean; saveDraftError: string | null; - isFetchingDraft: boolean; - hasFetchedDraft: boolean; - fetchDraftError: string | null; + isFetchingDrafts: boolean; + fetchDraftsError: string | null; } export const INITIAL_STATE: CreateState = { + drafts: null, + form: { title: '', brief: '', @@ -33,13 +35,18 @@ export const INITIAL_STATE: CreateState = { hasSavedDraft: true, saveDraftError: null, - isFetchingDraft: false, - hasFetchedDraft: false, - fetchDraftError: null, + isFetchingDrafts: false, + fetchDraftsError: null, }; -export default function createReducer(state: CreateState = INITIAL_STATE, action: any) { +export default function createReducer( + state: CreateState = INITIAL_STATE, + action: any, +): CreateState { switch (action.type) { + case types.CREATE_DRAFT_PENDING: + + case types.UPDATE_FORM: return { ...state, @@ -50,14 +57,6 @@ export default function createReducer(state: CreateState = INITIAL_STATE, action hasSavedDraft: false, }; - case types.RESET_FORM: - return { - ...state, - form: { ...INITIAL_STATE.form }, - hasSavedDraft: true, - hasFetchedDraft: false, - }; - case types.SAVE_DRAFT_PENDING: return { ...state, @@ -79,29 +78,23 @@ export default function createReducer(state: CreateState = INITIAL_STATE, action saveDraftError: action.payload, }; - case types.FETCH_DRAFT_PENDING: + case types.FETCH_DRAFTS_PENDING: return { ...state, - isFetchingDraft: true, - fetchDraftError: null, + isFetchingDrafts: true, + fetchDraftsError: null, }; - case types.FETCH_DRAFT_FULFILLED: + case types.FETCH_DRAFTS_FULFILLED: return { ...state, - isFetchingDraft: false, - hasFetchedDraft: !!action.payload, - form: action.payload - ? { - ...state.form, - ...action.payload, - } - : state.form, + isFetchingDrafts: false, + drafts: action.payload.data, }; - case types.FETCH_DRAFT_REJECTED: + case types.FETCH_DRAFTS_REJECTED: return { ...state, - isFetchingDraft: false, - fetchDraftError: action.payload, + isFetchingDrafts: false, + fetchDraftsError: action.payload, }; } return state; diff --git a/frontend/client/modules/create/sagas.ts b/frontend/client/modules/create/sagas.ts new file mode 100644 index 00000000..16c1e070 --- /dev/null +++ b/frontend/client/modules/create/sagas.ts @@ -0,0 +1,30 @@ +import { SagaIterator } from 'redux-saga'; +import { takeEvery, put, call } from 'redux-saga/effects'; +import { push } from 'connected-react-router'; +import { postProposalDraft } from 'api/api'; +import { createDraft } from './actions'; +import types from './types'; + +export function* handleCreateDraft(action: ReturnType): SagaIterator { + try { + const res: Yielded = yield call(postProposalDraft); + yield put({ + type: types.CREATE_DRAFT_FULFILLED, + payload: res.data, + }); + + if (action.payload.redirect) { + yield put(push(`/proposals/${res.data.proposalId}/edit`)); + } + } catch(err) { + yield put({ + type: types.CREATE_DRAFT_REJECTED, + payload: err.message || err.toString(), + error: true, + }); + } +} + +export default function* createSagas(): SagaIterator { + yield takeEvery(types.CREATE_DRAFT_PENDING, handleCreateDraft); +} \ No newline at end of file diff --git a/frontend/client/modules/create/types.ts b/frontend/client/modules/create/types.ts index c22857ea..543805c3 100644 --- a/frontend/client/modules/create/types.ts +++ b/frontend/client/modules/create/types.ts @@ -1,17 +1,20 @@ enum CreateTypes { UPDATE_FORM = 'UPDATE_FORM', - RESET_FORM = 'RESET_FORM', - SAVE_DRAFT = 'SAVE_DRAFT', SAVE_DRAFT_PENDING = 'SAVE_DRAFT_PENDING', SAVE_DRAFT_FULFILLED = 'SAVE_DRAFT_FULFILLED', SAVE_DRAFT_REJECTED = 'SAVE_DRAFT_REJECTED', - FETCH_DRAFT = 'FETCH_DRAFT', - FETCH_DRAFT_PENDING = 'FETCH_DRAFT_PENDING', - FETCH_DRAFT_FULFILLED = 'FETCH_DRAFT_FULFILLED', - FETCH_DRAFT_REJECTED = 'FETCH_DRAFT_REJECTED', + FETCH_DRAFTS = 'FETCH_DRAFTS', + FETCH_DRAFTS_PENDING = 'FETCH_DRAFTS_PENDING', + FETCH_DRAFTS_FULFILLED = 'FETCH_DRAFTS_FULFILLED', + FETCH_DRAFTS_REJECTED = 'FETCH_DRAFTS_REJECTED', + + CREATE_DRAFT = 'CREATE_DRAFT', + CREATE_DRAFT_PENDING = 'CREATE_DRAFT_PENDING', + CREATE_DRAFT_FULFILLED = 'CREATE_DRAFT_FULFILLED', + CREATE_DRAFT_REJECTED = 'CREATE_DRAFT_REJECTED', SUBMIT = 'CREATE_PROPOSAL', SUBMIT_PENDING = 'CREATE_PROPOSAL_PENDING', @@ -19,4 +22,8 @@ enum CreateTypes { SUBMIT_REJECTED = 'CREATE_PROPOSAL_REJECTED', } +export interface CreateDraftOptions { + redirect?: boolean; +} + export default CreateTypes; diff --git a/frontend/client/pages/create.tsx b/frontend/client/pages/create.tsx index dbd8df2a..5134559d 100644 --- a/frontend/client/pages/create.tsx +++ b/frontend/client/pages/create.tsx @@ -1,17 +1,55 @@ import React from 'react'; +import { connect } from 'react-redux'; import { Spin } from 'antd'; -import Web3Container from 'lib/Web3Container'; -import CreateFlow from 'components/CreateFlow'; +import { fetchDrafts, createDraft } from 'modules/create/actions'; +import { AppState } from 'store/reducers'; -const Create = () => ( - } - render={({ accounts }) => ( -
- -
- )} - /> -); +interface StateProps { + drafts: AppState['create']['drafts']; + isFetchingDrafts: AppState['create']['isFetchingDrafts']; + fetchDraftsError: AppState['create']['fetchDraftsError']; +} -export default Create; +interface DispatchProps { + fetchDrafts: typeof fetchDrafts; + createDraft: typeof createDraft; +} + +type Props = StateProps & DispatchProps; + +class Create extends React.Component { + componentWillMount() { + this.props.fetchDrafts(); + } + + componentDidUpdate(prevProps: Props) { + const { drafts } = this.props; + if (drafts && !prevProps.drafts && !drafts.length) { + this.props.createDraft({ redirect: true }); + } + } + + render() { + const { drafts, fetchDraftsError } = this.props; + + if (drafts && drafts.length) { + return
{JSON.stringify(drafts, null, 2)}
+ } else if (fetchDraftsError) { + return

{fetchDraftsError}

; + } else { + return ; + } + } +} + +export default connect( + state => ({ + drafts: state.create.drafts, + isFetchingDrafts: state.create.isFetchingDrafts, + fetchDraftsError: state.create.fetchDraftsError, + }), + { + fetchDrafts, + createDraft, + }, +)(Create); diff --git a/frontend/client/pages/proposal-edit.tsx b/frontend/client/pages/proposal-edit.tsx new file mode 100644 index 00000000..1ac859fc --- /dev/null +++ b/frontend/client/pages/proposal-edit.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Spin } from 'antd'; +import Web3Container from 'lib/Web3Container'; +import CreateFlow from 'components/CreateFlow'; + +class ProposalEdit extends React.Component<{}> { + render() { + return ( + } + render={({ accounts }) => ( +

Sup

+ )} + /> + ); + } +}; + +export default ProposalEdit; diff --git a/frontend/client/store/configure.tsx b/frontend/client/store/configure.tsx index 13daf97e..ab65a259 100644 --- a/frontend/client/store/configure.tsx +++ b/frontend/client/store/configure.tsx @@ -4,8 +4,10 @@ import thunkMiddleware, { ThunkMiddleware } from 'redux-thunk'; import promiseMiddleware from 'redux-promise-middleware'; import { composeWithDevTools } from 'redux-devtools-extension'; import { persistStore, Persistor } from 'redux-persist'; +import { routerMiddleware } from 'connected-react-router'; import rootReducer, { AppState, combineInitialState } from './reducers'; import rootSaga from './sagas'; +import history from './history'; import axios from 'api/axios'; const sagaMiddleware = createSagaMiddleware(); @@ -27,7 +29,12 @@ export function configureStore(initialState: Partial = combineInitialS const store: Store = createStore( rootReducer, initialState, - bindMiddleware([sagaMiddleware, thunkMiddleware, promiseMiddleware()]), + bindMiddleware([ + sagaMiddleware, + thunkMiddleware, + promiseMiddleware(), + routerMiddleware(history), + ]), ); // Don't persist server side, but don't mess up types for client side const persistor: Persistor = process.env.SERVER_SIDE_RENDER diff --git a/frontend/client/store/history.ts b/frontend/client/store/history.ts new file mode 100644 index 00000000..0e76db11 --- /dev/null +++ b/frontend/client/store/history.ts @@ -0,0 +1,11 @@ +import { createBrowserHistory, createMemoryHistory } from 'history'; + +const history = (() => { + if (typeof window === 'undefined') { + return createMemoryHistory(); + } else { + return createBrowserHistory(); + } +})(); + +export default history; \ No newline at end of file diff --git a/frontend/client/store/reducers.tsx b/frontend/client/store/reducers.tsx index 2ffc851e..e649b5cd 100644 --- a/frontend/client/store/reducers.tsx +++ b/frontend/client/store/reducers.tsx @@ -1,4 +1,5 @@ import { combineReducers, Reducer } from 'redux'; +import { connectRouter, RouterState } from 'connected-react-router'; import { persistReducer } from 'redux-persist'; import web3, { Web3State, INITIAL_STATE as web3InitialState } from 'modules/web3'; import proposal, { @@ -12,6 +13,7 @@ import authReducer, { authPersistConfig, } from 'modules/auth'; import users, { UsersState, INITIAL_STATE as usersInitialState } from 'modules/users'; +import history from './history'; export interface AppState { proposal: ProposalState; @@ -19,9 +21,10 @@ export interface AppState { create: CreateState; users: UsersState; auth: AuthState; + router: RouterState; } -export const combineInitialState: AppState = { +export const combineInitialState: Partial = { proposal: proposalInitialState, web3: web3InitialState, create: createInitialState, @@ -36,4 +39,5 @@ export default combineReducers({ users, // Don't allow for redux-persist's _persist key to be touched in our code auth: (persistReducer(authPersistConfig, authReducer) as any) as Reducer, + router: connectRouter(history), }); diff --git a/frontend/client/store/sagas.ts b/frontend/client/store/sagas.ts index 4f65ad21..10db04e5 100644 --- a/frontend/client/store/sagas.ts +++ b/frontend/client/store/sagas.ts @@ -1,8 +1,10 @@ import { fork } from 'redux-saga/effects'; import { authSagas } from 'modules/auth'; import { web3Sagas } from 'modules/web3'; +import { createSagas } from 'modules/create'; export default function* rootSaga() { yield fork(authSagas); yield fork(web3Sagas); + yield fork(createSagas); } diff --git a/frontend/client/typings/saga-helpers.d.ts b/frontend/client/typings/saga-helpers.d.ts new file mode 100644 index 00000000..06cdec6c --- /dev/null +++ b/frontend/client/typings/saga-helpers.d.ts @@ -0,0 +1,24 @@ +import { Effect } from 'redux-saga/effects'; + +type ExtPromise = T extends Promise ? U : T; + +type ExtSaga = T extends IterableIterator ? Exclude : ExtPromise; + +/** + * Use this helper to unwrap return types from effects like Call / Apply + * In the case of calling a function that returns a promise, this helper will unwrap the + * promise and return the type inside it. In the case of calling another saga / generator, + * this helper will return the actual return value of the saga / generator, otherwise, + * it'll return the original type. + * + * NOTE 1: When using this to extract the type of a Saga, make sure to remove the `SagaIterator` + * return type of the saga if it contains one, since that masks the actual return type of the saga. + * + * NOTE 2: You will most likely need to use the `typeof` operator to use this helper. + * E.g type X = Yielded + */ +declare global { + export type Yielded = T extends (...args: any[]) => any + ? ExtSaga> + : ExtPromise; +} diff --git a/frontend/package.json b/frontend/package.json index b640e0eb..dff5bc43 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -78,6 +78,7 @@ "body-parser": "^1.18.3", "chalk": "^2.4.1", "classnames": "^2.2.6", + "connected-react-router": "5.0.1", "cookie-parser": "^1.4.3", "copy-webpack-plugin": "^4.6.0", "core-js": "^2.5.7", @@ -97,6 +98,7 @@ "fs-extra": "^7.0.0", "global": "4.3.2", "hdkey": "1.1.0", + "history": "4.7.2", "http-proxy-middleware": "^0.18.0", "https-proxy": "0.0.2", "husky": "^1.0.0-rc.8", diff --git a/frontend/types/proposal.ts b/frontend/types/proposal.ts index 02b24aa6..309bfa93 100644 --- a/frontend/types/proposal.ts +++ b/frontend/types/proposal.ts @@ -31,6 +31,17 @@ export interface CrowdFund { isRaiseGoalReached: boolean; } +export interface ProposalDraft { + proposalId: number; + dateCreated: number; + title: string; + body: string; + stage: string; + category?: PROPOSAL_CATEGORY; + milestones: ProposalMilestone[]; + team: TeamMember[]; +} + export interface Proposal { proposalId: number; proposalAddress: string; diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 06200a59..28503a38 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -4534,6 +4534,13 @@ connect-history-api-fallback@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" +connected-react-router@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/connected-react-router/-/connected-react-router-5.0.1.tgz#8379854fad7e027b1e27652c00ad534f8ad244b3" + dependencies: + immutable "^3.8.1" + seamless-immutable "^7.1.3" + consola@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/consola/-/consola-1.4.3.tgz#945e967e05430ddabd3608b37f5fa37fcfacd9dd" @@ -7481,7 +7488,7 @@ hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" -history@^4.7.2: +history@4.7.2, history@^4.7.2: version "4.7.2" resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" dependencies: @@ -13604,6 +13611,10 @@ scss-tokenizer@^0.2.3: js-base64 "^2.1.8" source-map "^0.4.2" +seamless-immutable@^7.1.3: + version "7.1.4" + resolved "https://registry.yarnpkg.com/seamless-immutable/-/seamless-immutable-7.1.4.tgz#6e9536def083ddc4dea0207d722e0e80d0f372f8" + secp256k1@^3.0.1: version "3.5.0" resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-3.5.0.tgz#677d3b8a8e04e1a5fa381a1ae437c54207b738d0" From 2c804a412ac4d1a1cf7f719f5a3d4b7f5c1be7c9 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Tue, 13 Nov 2018 11:07:37 -0500 Subject: [PATCH 04/32] Add frontend changes too --- frontend/client/modules/create/actions.ts | 2 -- frontend/client/modules/create/reducers.ts | 1 - frontend/client/modules/create/sagas.ts | 4 ++-- frontend/client/pages/create.tsx | 2 +- frontend/client/pages/proposal-edit.tsx | 6 ++---- frontend/client/store/history.ts | 2 +- frontend/client/typings/saga-helpers.d.ts | 4 +++- 7 files changed, 9 insertions(+), 12 deletions(-) diff --git a/frontend/client/modules/create/actions.ts b/frontend/client/modules/create/actions.ts index b04e1f6f..efb7c2a2 100644 --- a/frontend/client/modules/create/actions.ts +++ b/frontend/client/modules/create/actions.ts @@ -43,8 +43,6 @@ export function fetchDrafts() { }; } - - export function createDraft(opts: CreateDraftOptions = {}) { return { type: types.CREATE_DRAFT_PENDING, diff --git a/frontend/client/modules/create/reducers.ts b/frontend/client/modules/create/reducers.ts index 22f24ba0..29fdee99 100644 --- a/frontend/client/modules/create/reducers.ts +++ b/frontend/client/modules/create/reducers.ts @@ -45,7 +45,6 @@ export default function createReducer( ): CreateState { switch (action.type) { case types.CREATE_DRAFT_PENDING: - case types.UPDATE_FORM: return { diff --git a/frontend/client/modules/create/sagas.ts b/frontend/client/modules/create/sagas.ts index 16c1e070..e909133c 100644 --- a/frontend/client/modules/create/sagas.ts +++ b/frontend/client/modules/create/sagas.ts @@ -16,7 +16,7 @@ export function* handleCreateDraft(action: ReturnType): Saga if (action.payload.redirect) { yield put(push(`/proposals/${res.data.proposalId}/edit`)); } - } catch(err) { + } catch (err) { yield put({ type: types.CREATE_DRAFT_REJECTED, payload: err.message || err.toString(), @@ -27,4 +27,4 @@ export function* handleCreateDraft(action: ReturnType): Saga export default function* createSagas(): SagaIterator { yield takeEvery(types.CREATE_DRAFT_PENDING, handleCreateDraft); -} \ No newline at end of file +} diff --git a/frontend/client/pages/create.tsx b/frontend/client/pages/create.tsx index 5134559d..a102ec28 100644 --- a/frontend/client/pages/create.tsx +++ b/frontend/client/pages/create.tsx @@ -33,7 +33,7 @@ class Create extends React.Component { const { drafts, fetchDraftsError } = this.props; if (drafts && drafts.length) { - return
{JSON.stringify(drafts, null, 2)}
+ return
{JSON.stringify(drafts, null, 2)}
; } else if (fetchDraftsError) { return

{fetchDraftsError}

; } else { diff --git a/frontend/client/pages/proposal-edit.tsx b/frontend/client/pages/proposal-edit.tsx index 1ac859fc..dc07a023 100644 --- a/frontend/client/pages/proposal-edit.tsx +++ b/frontend/client/pages/proposal-edit.tsx @@ -8,12 +8,10 @@ class ProposalEdit extends React.Component<{}> { return ( } - render={({ accounts }) => ( -

Sup

- )} + render={({ accounts }) =>

Sup

} /> ); } -}; +} export default ProposalEdit; diff --git a/frontend/client/store/history.ts b/frontend/client/store/history.ts index 0e76db11..e1c1c9c1 100644 --- a/frontend/client/store/history.ts +++ b/frontend/client/store/history.ts @@ -8,4 +8,4 @@ const history = (() => { } })(); -export default history; \ No newline at end of file +export default history; diff --git a/frontend/client/typings/saga-helpers.d.ts b/frontend/client/typings/saga-helpers.d.ts index 06cdec6c..20102396 100644 --- a/frontend/client/typings/saga-helpers.d.ts +++ b/frontend/client/typings/saga-helpers.d.ts @@ -2,7 +2,9 @@ import { Effect } from 'redux-saga/effects'; type ExtPromise = T extends Promise ? U : T; -type ExtSaga = T extends IterableIterator ? Exclude : ExtPromise; +type ExtSaga = T extends IterableIterator + ? Exclude + : ExtPromise; /** * Use this helper to unwrap return types from effects like Call / Apply From 95c765834a00de2315af21949fba576dd0744b91 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Tue, 13 Nov 2018 17:51:02 -0500 Subject: [PATCH 05/32] Setup draft list component, edit page from route. --- frontend/client/Routes.tsx | 4 +- .../client/components/DraftList/index.tsx | 110 +++++++++++++++++- .../client/components/DraftList/style.less | 26 +++++ frontend/client/modules/create/actions.ts | 14 ++- frontend/client/modules/create/reducers.ts | 69 ++++++++--- frontend/client/modules/create/sagas.ts | 50 +++++++- frontend/client/modules/create/selectors.ts | 8 ++ frontend/client/modules/create/types.ts | 5 + frontend/client/pages/create.tsx | 55 +-------- frontend/client/pages/proposal-edit.tsx | 54 +++++++-- frontend/types/proposal.ts | 1 + 11 files changed, 308 insertions(+), 88 deletions(-) create mode 100644 frontend/client/modules/create/selectors.ts diff --git a/frontend/client/Routes.tsx b/frontend/client/Routes.tsx index 307d9482..e52aaa93 100644 --- a/frontend/client/Routes.tsx +++ b/frontend/client/Routes.tsx @@ -61,8 +61,6 @@ const routeConfigs: RouteConfig[] = [ }, template: { title: 'Create a Proposal', - isFullScreen: true, - hideFooter: true, requiresWeb3: true, }, onlyLoggedIn: true, @@ -87,6 +85,8 @@ const routeConfigs: RouteConfig[] = [ }, template: { title: 'Edit proposal', + isFullScreen: true, + hideFooter: true, requiresWeb3: true, }, onlyLoggedIn: true, diff --git a/frontend/client/components/DraftList/index.tsx b/frontend/client/components/DraftList/index.tsx index c16a9043..cfb0fb59 100644 --- a/frontend/client/components/DraftList/index.tsx +++ b/frontend/client/components/DraftList/index.tsx @@ -1,4 +1,112 @@ import React from 'react'; import { connect } from 'react-redux'; +import { Link } from 'react-router-dom'; +import { List, Button, Divider, Spin, Alert } from 'antd'; +import { ProposalDraft } from 'types'; +import { fetchDrafts, createDraft } from 'modules/create/actions'; +import { AppState } from 'store/reducers'; +import './style.less'; -export default class DraftList extends React.Component< \ No newline at end of file +interface StateProps { + drafts: AppState['create']['drafts']; + isFetchingDrafts: AppState['create']['isFetchingDrafts']; + fetchDraftsError: AppState['create']['fetchDraftsError']; + isCreatingDraft: AppState['create']['isCreatingDraft']; + createDraftError: AppState['create']['createDraftError']; +} + +interface DispatchProps { + fetchDrafts: typeof fetchDrafts; + createDraft: typeof createDraft; +} + +interface OwnProps { + createIfNone?: boolean; +} + +type Props = StateProps & DispatchProps & OwnProps; + +class DraftList extends React.Component { + componentWillMount() { + this.props.fetchDrafts(); + } + + componentDidUpdate(prevProps: Props) { + const { drafts, createIfNone } = this.props; + if (createIfNone && drafts && !prevProps.drafts && !drafts.length) { + this.createDraft(); + } + } + + render() { + const { drafts, isCreatingDraft, createDraftError } = this.props; + + if (!drafts) { + return ; + } + + return ( +
+

Your drafts

+ { + const actions = [ + + Edit + , + Delete, + ]; + return ( + + Untitled proposal} + description={d.brief || No description} + /> + + ); + }} + /> + or + {createDraftError && ( + + )} + +
+ ); + } + + private createDraft = () => { + this.props.createDraft({ redirect: true }); + }; +} + +export default connect( + state => ({ + drafts: state.create.drafts, + isFetchingDrafts: state.create.isFetchingDrafts, + fetchDraftsError: state.create.fetchDraftsError, + isCreatingDraft: state.create.isCreatingDraft, + createDraftError: state.create.createDraftError, + }), + { + fetchDrafts, + createDraft, + }, +)(DraftList); diff --git a/frontend/client/components/DraftList/style.less b/frontend/client/components/DraftList/style.less index e69de29b..5e934567 100644 --- a/frontend/client/components/DraftList/style.less +++ b/frontend/client/components/DraftList/style.less @@ -0,0 +1,26 @@ +.DraftList { + max-width: 560px; + margin: 0 auto; + + &-title { + font-size: 1.6rem; + text-align: center; + margin-bottom: 1rem; + } + + &-create { + display: block; + max-width: 280px; + height: 3.2rem; + margin: 0 auto; + } + + .ant-divider { + margin-top: 1rem; + margin-bottom: 2rem; + } + + .ant-alert { + margin-bottom: 1rem; + } +} \ No newline at end of file diff --git a/frontend/client/modules/create/actions.ts b/frontend/client/modules/create/actions.ts index efb7c2a2..ddefb670 100644 --- a/frontend/client/modules/create/actions.ts +++ b/frontend/client/modules/create/actions.ts @@ -12,6 +12,13 @@ type GetState = () => AppState; // TODO: Replace with server side storage const LS_DRAFT_KEY = 'CREATE_PROPOSAL_DRAFT'; +export function initializeForm(proposalId: number) { + return { + type: types.INITIALIZE_FORM_PENDING, + payload: proposalId, + }; +} + export function updateForm(form: Partial) { return (dispatch: Dispatch) => { dispatch({ @@ -35,12 +42,7 @@ export function saveDraft() { } export function fetchDrafts() { - return (dispatch: Dispatch) => { - return dispatch({ - type: types.FETCH_DRAFTS, - payload: getProposalDrafts(), - }); - }; + return { type: types.FETCH_DRAFTS_PENDING }; } export function createDraft(opts: CreateDraftOptions = {}) { diff --git a/frontend/client/modules/create/reducers.ts b/frontend/client/modules/create/reducers.ts index 29fdee99..6ccf3020 100644 --- a/frontend/client/modules/create/reducers.ts +++ b/frontend/client/modules/create/reducers.ts @@ -1,10 +1,12 @@ import types from './types'; import { CreateFormState, ProposalDraft } from 'types'; -import { ONE_DAY } from 'utils/time'; export interface CreateState { drafts: ProposalDraft[] | null; - form: CreateFormState; + form: CreateFormState | null; + + isInitializingForm: boolean; + initializeFormError: string | null; isSavingDraft: boolean; hasSavedDraft: boolean; @@ -12,24 +14,17 @@ export interface CreateState { isFetchingDrafts: boolean; fetchDraftsError: string | null; + + isCreatingDraft: boolean; + createDraftError: string | null; } export const INITIAL_STATE: CreateState = { drafts: null, + form: null, - form: { - title: '', - brief: '', - details: '', - category: null, - amountToRaise: '', - payOutAddress: '', - trustees: [], - milestones: [], - team: [], - deadline: ONE_DAY * 60, - milestoneDeadline: ONE_DAY * 7, - }, + isInitializingForm: false, + initializeFormError: null, isSavingDraft: false, hasSavedDraft: true, @@ -37,6 +32,9 @@ export const INITIAL_STATE: CreateState = { isFetchingDrafts: false, fetchDraftsError: null, + + isCreatingDraft: false, + createDraftError: null, }; export default function createReducer( @@ -56,6 +54,26 @@ export default function createReducer( hasSavedDraft: false, }; + case types.INITIALIZE_FORM_PENDING: + return { + ...state, + form: null, + isInitializingForm: true, + initializeFormError: null, + }; + case types.INITIALIZE_FORM_FULFILLED: + return { + ...state, + form: { ...action.payload }, + isInitializingForm: false, + }; + case types.INITIALIZE_FORM_REJECTED: + return { + ...state, + isInitializingForm: false, + initializeFormError: action.payload, + }; + case types.SAVE_DRAFT_PENDING: return { ...state, @@ -87,7 +105,7 @@ export default function createReducer( return { ...state, isFetchingDrafts: false, - drafts: action.payload.data, + drafts: action.payload, }; case types.FETCH_DRAFTS_REJECTED: return { @@ -95,6 +113,25 @@ export default function createReducer( isFetchingDrafts: false, fetchDraftsError: action.payload, }; + + case types.CREATE_DRAFT_PENDING: + return { + ...state, + isCreatingDraft: true, + createDraftError: null, + }; + case types.CREATE_DRAFT_FULFILLED: + return { + ...state, + drafts: [...(state.drafts || []), action.payload], + isCreatingDraft: false, + }; + case types.CREATE_DRAFT_REJECTED: + return { + ...state, + createDraftError: action.payload, + isCreatingDraft: false, + }; } return state; } diff --git a/frontend/client/modules/create/sagas.ts b/frontend/client/modules/create/sagas.ts index e909133c..f5d8af9f 100644 --- a/frontend/client/modules/create/sagas.ts +++ b/frontend/client/modules/create/sagas.ts @@ -1,8 +1,9 @@ import { SagaIterator } from 'redux-saga'; -import { takeEvery, put, call } from 'redux-saga/effects'; +import { takeEvery, takeLatest, put, call, select } from 'redux-saga/effects'; import { push } from 'connected-react-router'; -import { postProposalDraft } from 'api/api'; -import { createDraft } from './actions'; +import { postProposalDraft, getProposalDrafts } from 'api/api'; +import { getDraftById } from './selectors'; +import { createDraft, fetchDrafts, initializeForm } from './actions'; import types from './types'; export function* handleCreateDraft(action: ReturnType): SagaIterator { @@ -25,6 +26,49 @@ export function* handleCreateDraft(action: ReturnType): Saga } } +export function* handleFetchDrafts(): SagaIterator { + try { + const res: Yielded = yield call(getProposalDrafts); + yield put({ + type: types.FETCH_DRAFTS_FULFILLED, + payload: res.data, + }); + } catch (err) { + yield put({ + type: types.FETCH_DRAFTS_REJECTED, + payload: err.message || err.toString(), + error: true, + }); + } +} + +export function* handleInitializeForm( + action: ReturnType, +): SagaIterator { + try { + let draft: Yielded = yield select(getDraftById, action.payload); + if (!draft) { + yield call(handleFetchDrafts); + draft = yield select(getDraftById, action.payload); + if (!draft) { + throw new Error('Proposal not found'); + } + } + yield put({ + type: types.INITIALIZE_FORM_FULFILLED, + payload: draft, + }); + } catch (err) { + yield put({ + type: types.INITIALIZE_FORM_REJECTED, + payload: err.message || err.toString(), + error: true, + }); + } +} + export default function* createSagas(): SagaIterator { yield takeEvery(types.CREATE_DRAFT_PENDING, handleCreateDraft); + yield takeLatest(types.FETCH_DRAFTS_PENDING, handleFetchDrafts); + yield takeEvery(types.INITIALIZE_FORM_PENDING, handleInitializeForm); } diff --git a/frontend/client/modules/create/selectors.ts b/frontend/client/modules/create/selectors.ts new file mode 100644 index 00000000..1e533a45 --- /dev/null +++ b/frontend/client/modules/create/selectors.ts @@ -0,0 +1,8 @@ +import { AppState as S } from 'store/reducers'; + +export const getDraftById = (s: S, id: number) => { + if (!s.create.drafts) { + return undefined; + } + return s.create.drafts.find(d => d.proposalId === id); +}; diff --git a/frontend/client/modules/create/types.ts b/frontend/client/modules/create/types.ts index 543805c3..59fb5ea2 100644 --- a/frontend/client/modules/create/types.ts +++ b/frontend/client/modules/create/types.ts @@ -1,6 +1,11 @@ enum CreateTypes { UPDATE_FORM = 'UPDATE_FORM', + INITIALIZE_FORM = 'INITIALIZE_FORM', + INITIALIZE_FORM_PENDING = 'INITIALIZE_FORM_PENDING', + INITIALIZE_FORM_FULFILLED = 'INITIALIZE_FORM_FULFILLED', + INITIALIZE_FORM_REJECTED = 'INITIALIZE_FORM_REJECTED', + SAVE_DRAFT = 'SAVE_DRAFT', SAVE_DRAFT_PENDING = 'SAVE_DRAFT_PENDING', SAVE_DRAFT_FULFILLED = 'SAVE_DRAFT_FULFILLED', diff --git a/frontend/client/pages/create.tsx b/frontend/client/pages/create.tsx index a102ec28..841ca727 100644 --- a/frontend/client/pages/create.tsx +++ b/frontend/client/pages/create.tsx @@ -1,55 +1,6 @@ import React from 'react'; -import { connect } from 'react-redux'; -import { Spin } from 'antd'; -import { fetchDrafts, createDraft } from 'modules/create/actions'; -import { AppState } from 'store/reducers'; +import DraftList from 'components/DraftList'; -interface StateProps { - drafts: AppState['create']['drafts']; - isFetchingDrafts: AppState['create']['isFetchingDrafts']; - fetchDraftsError: AppState['create']['fetchDraftsError']; -} +const CreatePage = () => ; -interface DispatchProps { - fetchDrafts: typeof fetchDrafts; - createDraft: typeof createDraft; -} - -type Props = StateProps & DispatchProps; - -class Create extends React.Component { - componentWillMount() { - this.props.fetchDrafts(); - } - - componentDidUpdate(prevProps: Props) { - const { drafts } = this.props; - if (drafts && !prevProps.drafts && !drafts.length) { - this.props.createDraft({ redirect: true }); - } - } - - render() { - const { drafts, fetchDraftsError } = this.props; - - if (drafts && drafts.length) { - return
{JSON.stringify(drafts, null, 2)}
; - } else if (fetchDraftsError) { - return

{fetchDraftsError}

; - } else { - return ; - } - } -} - -export default connect( - state => ({ - drafts: state.create.drafts, - isFetchingDrafts: state.create.isFetchingDrafts, - fetchDraftsError: state.create.fetchDraftsError, - }), - { - fetchDrafts, - createDraft, - }, -)(Create); +export default CreatePage; diff --git a/frontend/client/pages/proposal-edit.tsx b/frontend/client/pages/proposal-edit.tsx index dc07a023..a875130e 100644 --- a/frontend/client/pages/proposal-edit.tsx +++ b/frontend/client/pages/proposal-edit.tsx @@ -1,17 +1,55 @@ import React from 'react'; +import { connect } from 'react-redux'; +import { withRouter, RouteComponentProps } from 'react-router'; import { Spin } from 'antd'; import Web3Container from 'lib/Web3Container'; import CreateFlow from 'components/CreateFlow'; +import { initializeForm } from 'modules/create/actions'; +import { AppState } from 'store/reducers'; + +interface StateProps { + form: AppState['create']['form']; + isInitializingForm: AppState['create']['isInitializingForm']; + initializeFormError: AppState['create']['initializeFormError']; +} + +interface DispatchProps { + initializeForm: typeof initializeForm; +} + +type Props = StateProps & DispatchProps & RouteComponentProps<{ id: string }>; + +class ProposalEdit extends React.Component { + componentWillMount() { + const proposalId = parseInt(this.props.match.params.id, 10); + this.props.initializeForm(proposalId); + } -class ProposalEdit extends React.Component<{}> { render() { - return ( - } - render={({ accounts }) =>

Sup

} - /> - ); + const { form, initializeFormError } = this.props; + + if (form) { + return ( + } + render={({ accounts }) => } + /> + ); + } else if (initializeFormError) { + return

{initializeFormError}

; + } else { + return ; + } } } -export default ProposalEdit; +const ConnectedProposalEdit = connect( + state => ({ + form: state.create.form, + isInitializingForm: state.create.isInitializingForm, + initializeFormError: state.create.initializeFormError, + }), + { initializeForm }, +)(ProposalEdit); + +export default withRouter(ConnectedProposalEdit); diff --git a/frontend/types/proposal.ts b/frontend/types/proposal.ts index 309bfa93..1b77451f 100644 --- a/frontend/types/proposal.ts +++ b/frontend/types/proposal.ts @@ -35,6 +35,7 @@ export interface ProposalDraft { proposalId: number; dateCreated: number; title: string; + brief: string; body: string; stage: string; category?: PROPOSAL_CATEGORY; From 8245795306ced3046a1a3108e58235c80750f8fe Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Wed, 14 Nov 2018 11:43:00 -0500 Subject: [PATCH 06/32] Temporary checkin, fuckup all of the types on the frontend. --- backend/grant/proposal/models.py | 39 ++++++- backend/grant/proposal/views.py | 14 +-- frontend/client/api/api.ts | 18 ++- .../client/components/CreateFlow/Basics.tsx | 26 ++--- .../client/components/CreateFlow/Details.tsx | 4 +- .../client/components/CreateFlow/Final.tsx | 12 +- .../components/CreateFlow/Governance.tsx | 40 +++---- .../components/CreateFlow/Milestones.tsx | 32 +++--- .../client/components/CreateFlow/Preview.tsx | 9 +- .../client/components/CreateFlow/Review.tsx | 39 ++++--- .../client/components/CreateFlow/Team.tsx | 4 +- .../client/components/CreateFlow/example.ts | 38 +++--- .../client/components/CreateFlow/index.tsx | 9 +- .../components/Proposal/Milestones/index.tsx | 2 +- frontend/client/modules/create/actions.ts | 26 +---- frontend/client/modules/create/reducers.ts | 4 +- frontend/client/modules/create/sagas.ts | 24 +++- frontend/client/modules/create/selectors.ts | 2 + frontend/client/modules/create/utils.ts | 108 +++++++++--------- frontend/client/modules/web3/actions.ts | 51 ++------- frontend/client/pages/proposal-edit.tsx | 6 +- frontend/types/create.ts | 16 --- frontend/types/index.ts | 1 - frontend/types/milestone.ts | 8 +- frontend/types/proposal.ts | 22 +++- 25 files changed, 275 insertions(+), 279 deletions(-) delete mode 100644 frontend/types/create.ts diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 7511d032..4c5b0969 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -124,6 +124,30 @@ class Proposal(db.Model): return Proposal( **kwargs ) + + def update( + self, + title: str = '', + brief: str = '', + category: str = '', + details: str = '', + target: str = '0', + payout_address: str = '', + trustees: List[str] = [], + deadline_duration: int = 5184000, # 60 days + vote_duration: int = 604800 # 7 days + ): + self.title = title + self.brief = brief + self.category = category + self.content = details + self.target = target + self.payout_address = payout_address + self.trustees = ','.join(trustees) + self.deadline_duration = deadline_duration + self.vote_duration = vote_duration + Proposal.validate(vars(self)) + def publish(self): # Require certain fields @@ -149,19 +173,24 @@ class ProposalSchema(ma.Schema): "stage", "date_created", "title", + "brief", "proposal_id", "proposal_address", - "body", + "content", "comments", "updates", "milestones", "category", - "team" + "team", + "trustees", + "payout_address", + "deadline_duration", + "vote_duration" ) date_created = ma.Method("get_date_created") proposal_id = ma.Method("get_proposal_id") - body = ma.Method("get_body") + trustees = ma.Method("get_trustees") comments = ma.Nested("CommentSchema", many=True) updates = ma.Nested("ProposalUpdateSchema", many=True) @@ -177,6 +206,10 @@ class ProposalSchema(ma.Schema): def get_date_created(self, obj): return dt_to_unix(obj.date_created) + def get_trustees(self, obj): + print(obj.trustees) + return obj.trustees.split(',') + proposal_schema = ProposalSchema() proposals_schema = ProposalSchema(many=True) diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index 16797a75..cf355770 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -109,7 +109,7 @@ def get_proposal_drafts(): parameter('title', type=str), parameter('brief', type=str), parameter('category', type=str), - parameter('content', type=str), + parameter('details', type=str), parameter('target', type=str), parameter('payoutAddress', type=str), parameter('trustees', type=list), @@ -117,14 +117,10 @@ def get_proposal_drafts(): parameter('voteDuration', type=int), parameter('milestones', type=list) ) -def update_proposal(milestones, trustees, **kwargs): +def update_proposal(milestones, proposal_id, **kwargs): # Update the base proposal fields - for key, value in kwargs.items(): - g.current_proposal[key] = value - if trustees: - g.current_proposal.trustees = ','.join(trustees) try: - Proposal.validate(g.current_proposal) + g.current_proposal.update(**kwargs) except ValidationException as e: return {"message": "Invalid proposal parameters: {}".format(str(e))}, 400 db.session.add(g.current_proposal) @@ -147,7 +143,8 @@ def update_proposal(milestones, trustees, **kwargs): db.session.commit() return proposal_schema.dump(g.current_proposal), 200 -@blueprint.route("/", methods=["PUT"]) + +@blueprint.route("/", methods=["DELETE"]) @requires_team_member_auth @endpoint.api() def delete_proposal_draft(): @@ -157,6 +154,7 @@ def delete_proposal_draft(): db.session.commit() return None, 202 + @blueprint.route("//publish", methods=["PUT"]) @requires_team_member_auth @endpoint.api( diff --git a/frontend/client/api/api.ts b/frontend/client/api/api.ts index 0546e432..71038ff3 100644 --- a/frontend/client/api/api.ts +++ b/frontend/client/api/api.ts @@ -5,7 +5,6 @@ import { formatTeamMemberFromGet, generateProposalUrl, } from 'utils/api'; -import { PROPOSAL_CATEGORY } from './constants'; export function getProposals(): Promise<{ data: Proposal[] }> { return axios.get('/api/v1/proposals/').then(res => { @@ -34,16 +33,7 @@ export function getProposalUpdates(proposalId: number | string) { return axios.get(`/api/v1/proposals/${proposalId}/updates`); } -export function postProposal(payload: { - // TODO type Milestone - accountAddress: string; - crowdFundContractAddress: string; - content: string; - title: string; - category: PROPOSAL_CATEGORY; - milestones: object[]; - team: TeamMember[]; -}) { +export function postProposal(payload: ProposalDraft) { return axios.post(`/api/v1/proposals/`, { ...payload, // Team has a different shape for POST @@ -114,3 +104,9 @@ export function getProposalDrafts(): Promise<{ data: ProposalDraft[] }> { export function postProposalDraft(): Promise<{ data: ProposalDraft }> { return axios.post('/api/v1/proposals/drafts'); } + +export function putProposal(proposal: ProposalDraft): Promise<{ data: ProposalDraft }> { + // Exclude some keys + const { proposalId, stage, dateCreated, ...rest } = proposal; + return axios.put(`/api/v1/proposals/${proposal.proposalId}`, rest); +} diff --git a/frontend/client/components/CreateFlow/Basics.tsx b/frontend/client/components/CreateFlow/Basics.tsx index ce3489a2..2c1ed96c 100644 --- a/frontend/client/components/CreateFlow/Basics.tsx +++ b/frontend/client/components/CreateFlow/Basics.tsx @@ -2,20 +2,20 @@ import React from 'react'; import { Input, Form, Icon, Select } from 'antd'; import { SelectValue } from 'antd/lib/select'; import { PROPOSAL_CATEGORY, CATEGORY_UI } from 'api/constants'; -import { CreateFormState } from 'types'; +import { ProposalDraft } from 'types'; import { getCreateErrors } from 'modules/create/utils'; import { typedKeys } from 'utils/ts'; -interface State { +interface State extends Partial { title: string; brief: string; - category: PROPOSAL_CATEGORY | null; - amountToRaise: string; + category?: PROPOSAL_CATEGORY; + target: string; } interface Props { initialState?: Partial; - updateForm(form: Partial): void; + updateForm(form: Partial): void; } export default class CreateFlowBasics extends React.Component { @@ -24,8 +24,8 @@ export default class CreateFlowBasics extends React.Component { this.state = { title: '', brief: '', - category: null, - amountToRaise: '', + category: undefined, + target: '', ...(props.initialState || {}), }; } @@ -46,7 +46,7 @@ export default class CreateFlowBasics extends React.Component { }; render() { - const { title, brief, category, amountToRaise } = this.state; + const { title, brief, category, target } = this.state; const errors = getCreateErrors(this.state, true); return ( @@ -101,17 +101,15 @@ export default class CreateFlowBasics extends React.Component { diff --git a/frontend/client/components/CreateFlow/Details.tsx b/frontend/client/components/CreateFlow/Details.tsx index 9057fd7b..4ff48a08 100644 --- a/frontend/client/components/CreateFlow/Details.tsx +++ b/frontend/client/components/CreateFlow/Details.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Form } from 'antd'; import MarkdownEditor from 'components/MarkdownEditor'; -import { CreateFormState } from 'types'; +import { ProposalDraft } from 'types'; interface State { details: string; @@ -9,7 +9,7 @@ interface State { interface Props { initialState?: Partial; - updateForm(form: Partial): void; + updateForm(form: Partial): void; } export default class CreateFlowTeam extends React.Component { diff --git a/frontend/client/components/CreateFlow/Final.tsx b/frontend/client/components/CreateFlow/Final.tsx index 49ded481..bc72a5f8 100644 --- a/frontend/client/components/CreateFlow/Final.tsx +++ b/frontend/client/components/CreateFlow/Final.tsx @@ -17,7 +17,6 @@ interface StateProps { interface DispatchProps { createProposal: typeof createActions['createProposal']; - resetForm: typeof createActions['resetForm']; } type Props = StateProps & DispatchProps; @@ -27,12 +26,6 @@ class CreateFinal extends React.Component { this.create(); } - componentDidUpdate(prevProps: Props) { - if (!prevProps.crowdFundCreatedAddress && this.props.crowdFundCreatedAddress) { - this.props.resetForm(); - } - } - render() { const { crowdFundError, crowdFundCreatedAddress, createdProposal } = this.props; let content; @@ -70,7 +63,9 @@ class CreateFinal extends React.Component { } private create = () => { - this.props.createProposal(this.props.form); + if (this.props.form) { + this.props.createProposal(this.props.form); + } }; } @@ -86,6 +81,5 @@ export default connect( }), { createProposal: createActions.createProposal, - resetForm: createActions.resetForm, }, )(CreateFinal); diff --git a/frontend/client/components/CreateFlow/Governance.tsx b/frontend/client/components/CreateFlow/Governance.tsx index b0bf5401..b5cb1cde 100644 --- a/frontend/client/components/CreateFlow/Governance.tsx +++ b/frontend/client/components/CreateFlow/Governance.tsx @@ -1,52 +1,52 @@ import React from 'react'; import { Input, Form, Icon, Button, Radio } from 'antd'; import { RadioChangeEvent } from 'antd/lib/radio'; -import { CreateFormState } from 'types'; +import { ProposalDraft } from 'types'; import { getCreateErrors } from 'modules/create/utils'; import { ONE_DAY } from 'utils/time'; import { DONATION } from 'utils/constants'; interface State { - payOutAddress: string; + payoutAddress: string; trustees: string[]; - deadline: number; - milestoneDeadline: number; + deadlineDuration: number; + voteDuration: number; } interface Props { initialState?: Partial; - updateForm(form: Partial): void; + updateForm(form: Partial): void; } export default class CreateFlowTeam extends React.Component { constructor(props: Props) { super(props); this.state = { - payOutAddress: '', + payoutAddress: '', trustees: [], - deadline: ONE_DAY * 60, - milestoneDeadline: ONE_DAY * 7, + deadlineDuration: ONE_DAY * 60, + voteDuration: ONE_DAY * 7, ...(props.initialState || {}), }; } render() { - const { payOutAddress, trustees, deadline, milestoneDeadline } = this.state; + const { payoutAddress, trustees, deadlineDuration, voteDuration } = this.state; const errors = getCreateErrors(this.state, true); return (
@@ -57,7 +57,7 @@ export default class CreateFlowTeam extends React.Component { size="large" type="text" disabled - value={payOutAddress} + value={payoutAddress} /> {trustees.map((address, idx) => ( @@ -82,13 +82,13 @@ export default class CreateFlowTeam extends React.Component { - {deadline === 300 && ( + {deadlineDuration === 300 && ( 5 minutes @@ -107,13 +107,13 @@ export default class CreateFlowTeam extends React.Component { - {milestoneDeadline === 60 && ( + {voteDuration === 60 && ( 60 Seconds diff --git a/frontend/client/components/CreateFlow/Milestones.tsx b/frontend/client/components/CreateFlow/Milestones.tsx index 1ee516a2..3a25424c 100644 --- a/frontend/client/components/CreateFlow/Milestones.tsx +++ b/frontend/client/components/CreateFlow/Milestones.tsx @@ -1,25 +1,25 @@ import React from 'react'; import { Form, Input, DatePicker, Card, Icon, Alert, Checkbox, Button } from 'antd'; import moment from 'moment'; -import { CreateFormState, CreateMilestone } from 'types'; +import { ProposalDraft, CreateMilestone } from 'types'; import { getCreateErrors } from 'modules/create/utils'; interface State { - milestones: CreateMilestone[]; + milestones: ProposalDraft['milestones']; } interface Props { initialState: Partial; - updateForm(form: Partial): void; + updateForm(form: Partial): void; } const DEFAULT_STATE: State = { milestones: [ { title: '', - description: '', - date: '', - payoutPercent: 100, + content: '', + dateEstimated: '', + payoutPercent: '100', immediatePayout: false, }, ], @@ -53,17 +53,17 @@ export default class CreateFlowMilestones extends React.Component addMilestone = () => { const { milestones: oldMilestones } = this.state; const lastMilestone = oldMilestones[oldMilestones.length - 1]; - const halfPayout = lastMilestone.payoutPercent / 2; + const halfPayout = parseInt(lastMilestone.payoutPercent, 10) / 2; const milestones = [ ...oldMilestones, { ...DEFAULT_STATE.milestones[0], - payoutPercent: halfPayout, + payoutPercent: halfPayout.toString(), }, ]; milestones[milestones.length - 2] = { ...lastMilestone, - payoutPercent: halfPayout, + payoutPercent: halfPayout.toString(), }; this.setState({ milestones }); }; @@ -148,9 +148,9 @@ const MilestoneFields = ({ rows={3} name="body" placeholder="Description of the deliverable" - value={milestone.description} + value={milestone.content} onChange={ev => - onChange(index, { ...milestone, description: ev.currentTarget.value }) + onChange(index, { ...milestone, content: ev.currentTarget.value }) } /> @@ -159,10 +159,14 @@ const MilestoneFields = ({ onChange(index, { ...milestone, date })} + onChange={(_, dateEstimated) => onChange(index, { ...milestone, dateEstimated })} /> onChange(index, { ...milestone, - payoutPercent: parseInt(ev.currentTarget.value, 10) || 0, + payoutPercent: ev.currentTarget.value || '0', }) } addonAfter="%" diff --git a/frontend/client/components/CreateFlow/Preview.tsx b/frontend/client/components/CreateFlow/Preview.tsx index ef7e8ff2..db9943ce 100644 --- a/frontend/client/components/CreateFlow/Preview.tsx +++ b/frontend/client/components/CreateFlow/Preview.tsx @@ -3,10 +3,11 @@ import { connect } from 'react-redux'; import { Alert } from 'antd'; import { ProposalDetail } from 'components/Proposal'; import { AppState } from 'store/reducers'; -import { makeProposalPreviewFromForm } from 'modules/create/utils'; +import { makeProposalPreviewFromDraft } from 'modules/create/utils'; +import { ProposalDraft } from 'types'; interface StateProps { - form: AppState['create']['form']; + form: ProposalDraft; } type Props = StateProps; @@ -14,7 +15,7 @@ type Props = StateProps; class CreateFlowPreview extends React.Component { render() { const { form } = this.props; - const proposal = makeProposalPreviewFromForm(form); + const proposal = makeProposalPreviewFromDraft(form); return ( <> { } export default connect(state => ({ - form: state.create.form, + form: state.create.form as ProposalDraft, }))(CreateFlowPreview); diff --git a/frontend/client/components/CreateFlow/Review.tsx b/frontend/client/components/CreateFlow/Review.tsx index 359d6a67..78c15851 100644 --- a/frontend/client/components/CreateFlow/Review.tsx +++ b/frontend/client/components/CreateFlow/Review.tsx @@ -4,18 +4,19 @@ import { Icon, Timeline } from 'antd'; import moment from 'moment'; import { getCreateErrors, KeyOfForm, FIELD_NAME_MAP } from 'modules/create/utils'; import Markdown from 'components/Markdown'; +import UserAvatar from 'components/UserAvatar'; import { AppState } from 'store/reducers'; import { CREATE_STEP } from './index'; import { CATEGORY_UI, PROPOSAL_CATEGORY } from 'api/constants'; +import { ProposalDraft } from 'types'; import './Review.less'; -import UserAvatar from 'components/UserAvatar'; interface OwnProps { setStep(step: CREATE_STEP): void; } interface StateProps { - form: AppState['create']['form']; + form: ProposalDraft; } type Props = OwnProps & StateProps; @@ -62,9 +63,9 @@ class CreateReview extends React.Component { error: errors.category, }, { - key: 'amountToRaise', - content:
{form.amountToRaise} ETH
, - error: errors.amountToRaise, + key: 'target', + content:
{form.target} ETH
, + error: errors.target, }, ], }, @@ -106,9 +107,9 @@ class CreateReview extends React.Component { name: 'Governance', fields: [ { - key: 'payOutAddress', - content: {form.payOutAddress}, - error: errors.payOutAddress, + key: 'payoutAddress', + content: {form.payoutAddress}, + error: errors.payoutAddress, }, { key: 'trustees', @@ -120,18 +121,18 @@ class CreateReview extends React.Component { error: errors.trustees && errors.trustees.join(' '), }, { - key: 'deadline', + key: 'deadlineDuration', content: `${Math.floor( - moment.duration((form.deadline || 0) * 1000).asDays(), + moment.duration((form.deadlineDuration || 0) * 1000).asDays(), )} days`, - error: errors.deadline, + error: errors.deadlineDuration, }, { - key: 'milestoneDeadline', + key: 'voteDuration', content: `${Math.floor( - moment.duration((form.milestoneDeadline || 0) * 1000).asDays(), + moment.duration((form.voteDuration || 0) * 1000).asDays(), )} days`, - error: errors.milestoneDeadline, + error: errors.voteDuration, }, ], }, @@ -183,13 +184,13 @@ class CreateReview extends React.Component { } export default connect(state => ({ - form: state.create.form, + form: state.create.form as ProposalDraft, }))(CreateReview); const ReviewMilestones = ({ milestones, }: { - milestones: AppState['create']['form']['milestones']; + milestones: ProposalDraft['milestones']; }) => ( {milestones.map(m => ( @@ -197,18 +198,18 @@ const ReviewMilestones = ({
{m.title}
- {moment(m.date, 'MMMM YYYY').format('MMMM YYYY')} + {moment(m.dateEstimated, 'MMMM YYYY').format('MMMM YYYY')} {' – '} {m.payoutPercent}% of funds
-
{m.description}
+
{m.content}
))}
); -const ReviewTeam = ({ team }: { team: AppState['create']['form']['team'] }) => ( +const ReviewTeam = ({ team }: { team: ProposalDraft['team'] }) => (
{team.map((u, idx) => (
diff --git a/frontend/client/components/CreateFlow/Team.tsx b/frontend/client/components/CreateFlow/Team.tsx index 885b4da4..65ad85ff 100644 --- a/frontend/client/components/CreateFlow/Team.tsx +++ b/frontend/client/components/CreateFlow/Team.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { Icon } from 'antd'; -import { CreateFormState, TeamMember } from 'types'; +import { TeamMember, ProposalDraft } from 'types'; import TeamMemberComponent from './TeamMember'; import './Team.less'; import { AppState } from 'store/reducers'; @@ -16,7 +16,7 @@ interface StateProps { interface OwnProps { initialState?: Partial; - updateForm(form: Partial): void; + updateForm(form: Partial): void; } type Props = OwnProps & StateProps; diff --git a/frontend/client/components/CreateFlow/example.ts b/frontend/client/components/CreateFlow/example.ts index 39ca9328..c4f3779a 100644 --- a/frontend/client/components/CreateFlow/example.ts +++ b/frontend/client/components/CreateFlow/example.ts @@ -1,5 +1,5 @@ import { PROPOSAL_CATEGORY } from 'api/constants'; -import { SOCIAL_TYPE, CreateFormState } from 'types'; +import { SOCIAL_TYPE, ProposalDraft } from 'types'; function generateRandomAddress() { return ( @@ -20,9 +20,9 @@ function generateRandomAddress() { } const createExampleProposal = ( - payOutAddress: string, + payoutAddress: string, trustees: string[], -): CreateFormState => { +): ProposalDraft => { return { title: 'Grant.io T-Shirts', brief: "The most stylish wear, sporting your favorite brand's logo", @@ -34,7 +34,7 @@ const createExampleProposal = ( avatarUrl: `https://randomuser.me/api/portraits/men/${Math.floor( Math.random() * 80, )}.jpg`, - ethAddress: payOutAddress, + ethAddress: payoutAddress, emailAddress: 'test@grant.io', socialAccounts: { [SOCIAL_TYPE.GITHUB]: 'dternyak', @@ -57,37 +57,41 @@ const createExampleProposal = ( ], details: '![](https://i.imgur.com/aQagS0D.png)\n\nWe all know it, Grant.io is the bee\'s knees. But wouldn\'t it be great if you could show all your friends and family how much you love it? Well that\'s what we\'re here to offer today.\n\n# What We\'re Building\n\nWhy, T-Shirts of course! These beautiful shirts made out of 100% cotton and laser printed for long lasting goodness come from American Apparel. We\'ll be offering them in 4 styles:\n\n* Crew neck (wrinkled)\n* Crew neck (straight)\n* Scoop neck (fitted)\n* V neck (fitted)\n\nShirt sizings will be as follows:\n\n| Size | S | M | L | XL |\n|--------|-----|-----|-----|------|\n| **Width** | 18" | 20" | 22" | 24" |\n| **Length** | 28" | 29" | 30" | 31" |\n\n# Who We Are\n\nWe are the team behind grant.io. In addition to our software engineering experience, we have over 78 years of T-Shirt printing expertise combined. Sometimes I wake up at night and realize I was printing shirts in my dreams. Weird, man.\n\n# Expense Breakdown\n\n* $1,000 - A professional designer will hand-craft each letter on the shirt.\n* $500 - We\'ll get the shirt printed from 5 different factories and choose the best quality one.\n* $3,000 - The full run of prints, with 20 smalls, 20 mediums, and 20 larges.\n* $500 - Pizza. Lots of pizza.\n\n**Total**: $5,000', - amountToRaise: '5', - payOutAddress, + target: '5', + payoutAddress, trustees, milestones: [ { title: 'Initial Funding', - description: + content: 'This will be used to pay for a professional designer to hand-craft each letter on the shirt.', - date: 'October 2018', - payoutPercent: 30, + dateEstimated: 'October 2018', + payoutPercent: '30', immediatePayout: true, }, { title: 'Test Prints', - description: + content: "We'll get test prints from 5 different factories and choose the highest quality shirts. Once we've decided, we'll order a full batch of prints.", - date: 'November 2018', - payoutPercent: 20, + dateEstimated: 'November 2018', + payoutPercent: '20', immediatePayout: false, }, { title: 'All Shirts Printed', - description: + content: "All of the shirts have been printed, hooray! They'll be given out at conferences and meetups.", - date: 'December 2018', - payoutPercent: 50, + dateEstimated: 'December 2018', + payoutPercent: '50', immediatePayout: false, }, ], - deadline: 300, - milestoneDeadline: 60, + deadlineDuration: 300, + voteDuration: 60, + // Unused + proposalId: 123456789, + dateCreated: 0, + stage: '', }; }; diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index cc3a5f80..17cc4df7 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -16,7 +16,7 @@ import Preview from './Preview'; import Final from './Final'; import createExampleProposal from './example'; import { createActions } from 'modules/create'; -import { CreateFormState } from 'types'; +import { ProposalDraft } from 'types'; import { getCreateErrors } from 'modules/create/utils'; import { web3Actions } from 'modules/web3'; import { AppState } from 'store/reducers'; @@ -126,7 +126,7 @@ interface State { class CreateFlow extends React.Component { private historyUnlisten: () => void; - private debouncedUpdateForm: (form: Partial) => void; + private debouncedUpdateForm: (form: Partial) => void; constructor(props: Props) { super(props); @@ -247,7 +247,7 @@ class CreateFlow extends React.Component { ); } - private updateForm = (form: Partial) => { + private updateForm = (form: Partial) => { this.props.updateForm(form); }; @@ -275,6 +275,9 @@ class CreateFlow extends React.Component { }; private checkFormErrors = () => { + if (!this.props.form) { + return true; + } const errors = getCreateErrors(this.props.form); return !!Object.keys(errors).length; }; diff --git a/frontend/client/components/Proposal/Milestones/index.tsx b/frontend/client/components/Proposal/Milestones/index.tsx index db2fec58..17914ef6 100644 --- a/frontend/client/components/Proposal/Milestones/index.tsx +++ b/frontend/client/components/Proposal/Milestones/index.tsx @@ -208,7 +208,7 @@ class ProposalMilestones extends React.Component {

{milestone.title}

{statuses} {notification} - {milestone.body} + {milestone.content}
{this.state.activeMilestoneIdx === i && !wasRefunded && ( diff --git a/frontend/client/modules/create/actions.ts b/frontend/client/modules/create/actions.ts index ddefb670..d8777d06 100644 --- a/frontend/client/modules/create/actions.ts +++ b/frontend/client/modules/create/actions.ts @@ -1,17 +1,11 @@ import { Dispatch } from 'redux'; -import { CreateFormState } from 'types'; -import { getProposalDrafts } from 'api/api'; -import { sleep } from 'utils/helpers'; +import { ProposalDraft } from 'types'; import { AppState } from 'store/reducers'; import { createCrowdFund } from 'modules/web3/actions'; -import { formToBackendData, formToContractData } from './utils'; import types, { CreateDraftOptions } from './types'; type GetState = () => AppState; -// TODO: Replace with server side storage -const LS_DRAFT_KEY = 'CREATE_PROPOSAL_DRAFT'; - export function initializeForm(proposalId: number) { return { type: types.INITIALIZE_FORM_PENDING, @@ -19,7 +13,7 @@ export function initializeForm(proposalId: number) { }; } -export function updateForm(form: Partial) { +export function updateForm(form: Partial) { return (dispatch: Dispatch) => { dispatch({ type: types.UPDATE_FORM, @@ -30,15 +24,7 @@ export function updateForm(form: Partial) { } export function saveDraft() { - return async (dispatch: Dispatch, getState: GetState) => { - const { form } = getState().create; - dispatch({ type: types.SAVE_DRAFT_PENDING }); - await sleep(1000); - - // TODO: Replace with server side save - localStorage.setItem(LS_DRAFT_KEY, JSON.stringify(form)); - dispatch({ type: types.SAVE_DRAFT_FULFILLED }); - }; + return { type: types.SAVE_DRAFT_PENDING }; } export function fetchDrafts() { @@ -52,15 +38,13 @@ export function createDraft(opts: CreateDraftOptions = {}) { }; } -export function createProposal(form: CreateFormState) { +export function createProposal(form: ProposalDraft) { return async (dispatch: Dispatch, getState: GetState) => { const state = getState(); // TODO: Handle if contract is unavailable const contract = state.web3.contracts[0]; // TODO: Move more of the backend handling into this action. - dispatch( - createCrowdFund(contract, formToContractData(form), formToBackendData(form)), - ); + dispatch(createCrowdFund(contract, form)); // TODO: dispatch reset conditionally, if crowd fund is success }; } diff --git a/frontend/client/modules/create/reducers.ts b/frontend/client/modules/create/reducers.ts index 6ccf3020..c41d507f 100644 --- a/frontend/client/modules/create/reducers.ts +++ b/frontend/client/modules/create/reducers.ts @@ -1,9 +1,9 @@ import types from './types'; -import { CreateFormState, ProposalDraft } from 'types'; +import { ProposalDraft } from 'types'; export interface CreateState { drafts: ProposalDraft[] | null; - form: CreateFormState | null; + form: ProposalDraft | null; isInitializingForm: boolean; initializeFormError: string | null; diff --git a/frontend/client/modules/create/sagas.ts b/frontend/client/modules/create/sagas.ts index f5d8af9f..fd82aef1 100644 --- a/frontend/client/modules/create/sagas.ts +++ b/frontend/client/modules/create/sagas.ts @@ -1,9 +1,9 @@ import { SagaIterator } from 'redux-saga'; import { takeEvery, takeLatest, put, call, select } from 'redux-saga/effects'; import { push } from 'connected-react-router'; -import { postProposalDraft, getProposalDrafts } from 'api/api'; -import { getDraftById } from './selectors'; -import { createDraft, fetchDrafts, initializeForm } from './actions'; +import { postProposalDraft, getProposalDrafts, putProposal } from 'api/api'; +import { getDraftById, getFormState } from './selectors'; +import { createDraft, initializeForm } from './actions'; import types from './types'; export function* handleCreateDraft(action: ReturnType): SagaIterator { @@ -42,6 +42,23 @@ export function* handleFetchDrafts(): SagaIterator { } } +export function* handleSaveDraft(): SagaIterator { + try { + const draft: Yielded = yield select(getFormState); + if (!draft) { + throw new Error('No form state to save draft'); + } + yield call(putProposal, draft); + yield put({ type: types.SAVE_DRAFT_FULFILLED }); + } catch (err) { + yield put({ + type: types.SAVE_DRAFT_REJECTED, + payload: err.message || err.toString(), + error: true, + }); + } +} + export function* handleInitializeForm( action: ReturnType, ): SagaIterator { @@ -70,5 +87,6 @@ export function* handleInitializeForm( export default function* createSagas(): SagaIterator { yield takeEvery(types.CREATE_DRAFT_PENDING, handleCreateDraft); yield takeLatest(types.FETCH_DRAFTS_PENDING, handleFetchDrafts); + yield takeLatest(types.SAVE_DRAFT_PENDING, handleSaveDraft); yield takeEvery(types.INITIALIZE_FORM_PENDING, handleInitializeForm); } diff --git a/frontend/client/modules/create/selectors.ts b/frontend/client/modules/create/selectors.ts index 1e533a45..46ba01aa 100644 --- a/frontend/client/modules/create/selectors.ts +++ b/frontend/client/modules/create/selectors.ts @@ -6,3 +6,5 @@ export const getDraftById = (s: S, id: number) => { } return s.create.drafts.find(d => d.proposalId === id); }; + +export const getFormState = (s: S) => s.create.form; diff --git a/frontend/client/modules/create/utils.ts b/frontend/client/modules/create/utils.ts index ceac1788..e9fd5c39 100644 --- a/frontend/client/modules/create/utils.ts +++ b/frontend/client/modules/create/utils.ts @@ -1,8 +1,8 @@ -import { CreateFormState, CreateMilestone } from 'types'; +import { ProposalDraft, CreateMilestone } from 'types'; import { TeamMember } from 'types'; import { isValidEthAddress, getAmountError } from 'utils/validators'; import { MILESTONE_STATE, ProposalWithCrowdFund } from 'types'; -import { ProposalContractData, ProposalBackendData } from 'modules/web3/actions'; +import { ProposalContractData } from 'modules/web3/actions'; import { Wei, toWei } from 'utils/units'; import { ONE_DAY } from 'utils/time'; import { PROPOSAL_CATEGORY } from 'api/constants'; @@ -14,43 +14,49 @@ interface CreateFormErrors { title?: string; brief?: string; category?: string; - amountToRaise?: string; + target?: string; team?: string[]; details?: string; - payOutAddress?: string; + payoutAddress?: string; trustees?: string[]; milestones?: string[]; - deadline?: string; - milestoneDeadline?: string; + deadlineDuration?: string; + voteDuration?: string; } -export type KeyOfForm = keyof CreateFormState; +export type KeyOfForm = keyof Partial; export const FIELD_NAME_MAP: { [key in KeyOfForm]: string } = { title: 'Title', brief: 'Brief', category: 'Category', - amountToRaise: 'Target amount', + target: 'Target amount', team: 'Team', details: 'Details', - payOutAddress: 'Payout address', + payoutAddress: 'Payout address', trustees: 'Trustees', milestones: 'Milestones', - deadline: 'Funding deadline', - milestoneDeadline: 'Milestone deadline', + deadlineDuration: 'Funding deadline', + voteDuration: 'Milestone deadline', + // Unused, but required by the type definition + proposalId: '', + dateCreated: '', + stage: '', }; export function getCreateErrors( - form: Partial, + form: Partial, skipRequired?: boolean, ): CreateFormErrors { const errors: CreateFormErrors = {}; - const { title, team, milestones, amountToRaise, payOutAddress, trustees } = form; + const { title, team, milestones, target, payoutAddress, trustees } = form; // Required fields with no extra validation if (!skipRequired) { for (const key in form) { if (!form[key as KeyOfForm]) { - errors[key as KeyOfForm] = `${FIELD_NAME_MAP[key as KeyOfForm]} is required`; + (errors as any)[key as KeyOfForm] = `${ + FIELD_NAME_MAP[key as KeyOfForm] + } is required`; } } @@ -68,17 +74,17 @@ export function getCreateErrors( } // Amount to raise - const amountFloat = amountToRaise ? parseFloat(amountToRaise) : 0; - if (amountToRaise && !Number.isNaN(amountFloat)) { - const amountError = getAmountError(amountFloat, TARGET_ETH_LIMIT); - if (amountError) { - errors.amountToRaise = amountError; + const targetFloat = target ? parseFloat(target) : 0; + if (target && !Number.isNaN(targetFloat)) { + const targetErr = getAmountError(targetFloat, TARGET_ETH_LIMIT); + if (targetErr) { + errors.target = targetErr; } } // Payout address - if (payOutAddress && !isValidEthAddress(payOutAddress)) { - errors.payOutAddress = 'That doesn’t look like a valid address'; + if (payoutAddress && !isValidEthAddress(payoutAddress)) { + errors.payoutAddress = 'That doesn’t look like a valid address'; } // Trustees @@ -94,7 +100,7 @@ export function getCreateErrors( err = 'That doesn’t look like a valid address'; } else if (trustees.indexOf(address) !== idx) { err = 'That address is already a trustee'; - } else if (payOutAddress === address) { + } else if (payoutAddress === address) { err = 'That address is already a trustee'; } @@ -111,7 +117,7 @@ export function getCreateErrors( let didMilestoneError = false; let cumulativeMilestonePct = 0; const milestoneErrors = milestones.map((ms, idx) => { - if (!ms.title || !ms.description || !ms.date || !ms.payoutPercent) { + if (!ms.title || !ms.content || !ms.dateEstimated || !ms.payoutPercent) { didMilestoneError = true; return ''; } @@ -119,12 +125,12 @@ export function getCreateErrors( let err = ''; if (ms.title.length > 40) { err = 'Title length can only be 40 characters maximum'; - } else if (ms.description.length > 200) { + } else if (ms.content.length > 200) { err = 'Description can only be 200 characters maximum'; } // Last one shows percentage errors - cumulativeMilestonePct += ms.payoutPercent; + cumulativeMilestonePct += parseInt(ms.payoutPercent, 10); if (idx === milestones.length - 1 && cumulativeMilestonePct !== 100) { err = `Payout percentages doesn’t add up to 100% (currently ${cumulativeMilestonePct}%)`; } @@ -173,11 +179,11 @@ export function getCreateTeamMemberError(user: TeamMember) { } function milestoneToMilestoneAmount(milestone: CreateMilestone, raiseGoal: Wei) { - return raiseGoal.divn(100).mul(Wei(milestone.payoutPercent.toString())); + return raiseGoal.divn(100).mul(Wei(milestone.payoutPercent)); } -export function formToContractData(form: CreateFormState): ProposalContractData { - const targetInWei = toWei(form.amountToRaise, 'ether'); +export function proposalToContractData(form: ProposalDraft): ProposalContractData { + const targetInWei = toWei(form.target, 'ether'); const milestoneAmounts = form.milestones.map(m => milestoneToMilestoneAmount(m, targetInWei), ); @@ -185,51 +191,41 @@ export function formToContractData(form: CreateFormState): ProposalContractData return { ethAmount: targetInWei, - payOutAddress: form.payOutAddress, + payoutAddress: form.payoutAddress, trusteesAddresses: form.trustees, milestoneAmounts, - milestones: form.milestones, - durationInMinutes: form.deadline || ONE_DAY * 60, - milestoneVotingPeriodInMinutes: form.milestoneDeadline || ONE_DAY * 7, + durationInMinutes: form.deadlineDuration || ONE_DAY * 60, + milestoneVotingPeriodInMinutes: form.voteDuration || ONE_DAY * 7, immediateFirstMilestonePayout, }; } -export function formToBackendData(form: CreateFormState): ProposalBackendData { - return { - title: form.title, - category: form.category as PROPOSAL_CATEGORY, - content: form.details, - team: form.team, - }; -} - // This is kind of a disgusting function, sorry. -export function makeProposalPreviewFromForm( - form: CreateFormState, +export function makeProposalPreviewFromDraft( + draft: ProposalDraft, ): ProposalWithCrowdFund { - const target = parseFloat(form.amountToRaise); + const target = parseFloat(draft.target); return { proposalId: 0, proposalUrlId: '0-title', proposalAddress: '0x0', dateCreated: Date.now(), - title: form.title, - body: form.details, + title: draft.title, + body: draft.details, stage: 'preview', - category: form.category || PROPOSAL_CATEGORY.DAPP, - team: form.team, - milestones: form.milestones.map((m, idx) => ({ + category: draft.category || PROPOSAL_CATEGORY.DAPP, + team: draft.team, + milestones: draft.milestones.map((m, idx) => ({ index: idx, title: m.title, - body: m.description, - content: m.description, - amount: toWei(target * (m.payoutPercent / 100), 'ether'), + body: m.content, + content: m.content, + amount: toWei(target * (parseInt(m.payoutPercent, 10) / 100), 'ether'), amountAgainstPayout: Wei('0'), percentAgainstPayout: 0, payoutRequestVoteDeadline: Date.now(), - dateEstimated: m.date, + dateEstimated: m.dateEstimated, immediatePayout: m.immediatePayout, isImmediatePayout: m.immediatePayout, isPaid: false, @@ -238,15 +234,15 @@ export function makeProposalPreviewFromForm( stage: MILESTONE_STATE.WAITING, })), crowdFund: { - immediateFirstMilestonePayout: form.milestones[0].immediatePayout, + immediateFirstMilestonePayout: draft.milestones[0].immediatePayout, balance: Wei('0'), funded: Wei('0'), percentFunded: 0, target: toWei(target, 'ether'), amountVotingForRefund: Wei('0'), percentVotingForRefund: 0, - beneficiary: form.payOutAddress, - trustees: form.trustees, + beneficiary: draft.payoutAddress, + trustees: draft.trustees, deadline: Date.now() + 100000, contributors: [], milestones: [], diff --git a/frontend/client/modules/web3/actions.ts b/frontend/client/modules/web3/actions.ts index 282fe6dd..3d2fce34 100644 --- a/frontend/client/modules/web3/actions.ts +++ b/frontend/client/modules/web3/actions.ts @@ -1,15 +1,14 @@ import types from './types'; import { Dispatch } from 'redux'; import getWeb3 from 'lib/getWeb3'; -import { postProposal } from 'api/api'; import getContract, { WrongNetworkError } from 'lib/getContract'; import { sleep } from 'utils/helpers'; import { web3ErrorToString } from 'utils/web3'; import { fetchProposal, fetchProposals } from 'modules/proposals/actions'; -import { PROPOSAL_CATEGORY } from 'api/constants'; +import { proposalToContractData } from 'modules/create/utils'; import { AppState } from 'store/reducers'; import { Wei } from 'utils/units'; -import { TeamMember, AuthSignatureData } from 'types'; +import { AuthSignatureData, ProposalDraft } from 'types'; type GetState = () => AppState; @@ -95,38 +94,18 @@ export function setAccounts() { } // TODO: Move these to a better place? -interface MilestoneData { - title: string; - description: string; - date: string; - payoutPercent: number; - immediatePayout: boolean; -} - export interface ProposalContractData { ethAmount: Wei; - payOutAddress: string; + payoutAddress: string; trusteesAddresses: string[]; milestoneAmounts: Wei[]; - milestones: MilestoneData[]; durationInMinutes: number; milestoneVotingPeriodInMinutes: number; immediateFirstMilestonePayout: boolean; } -export interface ProposalBackendData { - title: string; - content: string; - category: PROPOSAL_CATEGORY; - team: TeamMember[]; -} - export type TCreateCrowdFund = typeof createCrowdFund; -export function createCrowdFund( - CrowdFundFactoryContract: any, - contractData: ProposalContractData, - backendData: ProposalBackendData, -) { +export function createCrowdFund(CrowdFundFactoryContract: any, proposal: ProposalDraft) { return async (dispatch: Dispatch, getState: GetState) => { dispatch({ type: types.CROWD_FUND_PENDING, @@ -134,16 +113,13 @@ export function createCrowdFund( const { ethAmount, - payOutAddress, + payoutAddress, trusteesAddresses, milestoneAmounts, - milestones, durationInMinutes, milestoneVotingPeriodInMinutes, immediateFirstMilestonePayout, - } = contractData; - - const { content, title, category, team } = backendData; + } = proposalToContractData(proposal); const state = getState(); const accounts = state.web3.accounts; @@ -152,8 +128,8 @@ export function createCrowdFund( await CrowdFundFactoryContract.methods .createCrowdFund( ethAmount, - payOutAddress, - [payOutAddress, ...trusteesAddresses], + payoutAddress, + [payoutAddress, ...trusteesAddresses], milestoneAmounts, durationInMinutes, milestoneVotingPeriodInMinutes, @@ -163,15 +139,8 @@ export function createCrowdFund( .once('confirmation', async (_: any, receipt: any) => { const crowdFundContractAddress = receipt.events.ContractCreated.returnValues.newAddress; - await postProposal({ - accountAddress: accounts[0], - crowdFundContractAddress, - content, - title, - milestones, - category, - team, - }); + // TODO: Publish proposal + // await postProposal(proposal); dispatch({ type: types.CROWD_FUND_CREATED, payload: crowdFundContractAddress, diff --git a/frontend/client/pages/proposal-edit.tsx b/frontend/client/pages/proposal-edit.tsx index a875130e..981b22ac 100644 --- a/frontend/client/pages/proposal-edit.tsx +++ b/frontend/client/pages/proposal-edit.tsx @@ -32,7 +32,11 @@ class ProposalEdit extends React.Component { return ( } - render={({ accounts }) => } + render={({ accounts }) => ( +
+ +
+ )} /> ); } else if (initializeFormError) { diff --git a/frontend/types/create.ts b/frontend/types/create.ts deleted file mode 100644 index c3d1826a..00000000 --- a/frontend/types/create.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { PROPOSAL_CATEGORY } from 'api/constants'; -import { TeamMember, CreateMilestone } from 'types'; - -export interface CreateFormState { - title: string; - brief: string; - category: PROPOSAL_CATEGORY | null; - amountToRaise: string; - details: string; - payOutAddress: string; - trustees: string[]; - milestones: CreateMilestone[]; - team: TeamMember[]; - deadline: number | null; - milestoneDeadline: number | null; -} diff --git a/frontend/types/index.ts b/frontend/types/index.ts index 2ccc8fa8..a04a5443 100644 --- a/frontend/types/index.ts +++ b/frontend/types/index.ts @@ -1,6 +1,5 @@ export * from './user'; export * from './social'; -export * from './create'; export * from './comment'; export * from './milestone'; export * from './update'; diff --git a/frontend/types/milestone.ts b/frontend/types/milestone.ts index 431d896c..22159199 100644 --- a/frontend/types/milestone.ts +++ b/frontend/types/milestone.ts @@ -18,9 +18,7 @@ export interface Milestone { isImmediatePayout: boolean; } -// TODO - have backend camelCase keys before response export interface ProposalMilestone extends Milestone { - body: string; content: string; immediatePayout: boolean; dateEstimated: string; @@ -31,8 +29,8 @@ export interface ProposalMilestone extends Milestone { export interface CreateMilestone { title: string; - description: string; - date: string; - payoutPercent: number; + content: string; + dateEstimated: string; + payoutPercent: string; immediatePayout: boolean; } diff --git a/frontend/types/proposal.ts b/frontend/types/proposal.ts index 1b77451f..a38963d2 100644 --- a/frontend/types/proposal.ts +++ b/frontend/types/proposal.ts @@ -1,8 +1,13 @@ -import { TeamMember } from 'types'; import { Wei } from 'utils/units'; import { PROPOSAL_CATEGORY } from 'api/constants'; -import { Comment } from 'types'; -import { Milestone, ProposalMilestone, Update } from 'types'; +import { + CreateMilestone, + ProposalMilestone, + Update, + TeamMember, + Milestone, + Comment, +} from 'types'; export interface Contributor { address: string; @@ -36,10 +41,15 @@ export interface ProposalDraft { dateCreated: number; title: string; brief: string; - body: string; + category: PROPOSAL_CATEGORY; + details: string; stage: string; - category?: PROPOSAL_CATEGORY; - milestones: ProposalMilestone[]; + target: string; + payoutAddress: string; + trustees: string[]; + deadlineDuration: number; + voteDuration: number; + milestones: CreateMilestone[]; team: TeamMember[]; } From 8aceac0c4506530da420bd5f2a3eed8461ea48db Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Wed, 14 Nov 2018 12:27:40 -0500 Subject: [PATCH 07/32] Get backend draft updates working. --- backend/grant/proposal/models.py | 9 ++++----- backend/grant/proposal/views.py | 4 ++-- backend/migrations/versions/7e39b9773390_.py | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 4c5b0969..7db5f0d0 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -64,7 +64,7 @@ class Proposal(db.Model): category = db.Column(db.String(255), nullable=False) # Contract info - target = db.Column(db.BigInteger, nullable=False) + target = db.Column(db.String(255), nullable=False) payout_address = db.Column(db.String(255), nullable=False) trustees = db.Column(db.String(1024), nullable=False) deadline_duration = db.Column(db.Integer(), nullable=False) @@ -130,7 +130,7 @@ class Proposal(db.Model): title: str = '', brief: str = '', category: str = '', - details: str = '', + content: str = '', target: str = '0', payout_address: str = '', trustees: List[str] = [], @@ -140,7 +140,7 @@ class Proposal(db.Model): self.title = title self.brief = brief self.category = category - self.content = details + self.content = content self.target = target self.payout_address = payout_address self.trustees = ','.join(trustees) @@ -207,8 +207,7 @@ class ProposalSchema(ma.Schema): return dt_to_unix(obj.date_created) def get_trustees(self, obj): - print(obj.trustees) - return obj.trustees.split(',') + return [i for i in obj.trustees.split(',') if i != ''] proposal_schema = ProposalSchema() diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index 4a42b168..b737fa8b 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -109,7 +109,7 @@ def get_proposal_drafts(): parameter('title', type=str), parameter('brief', type=str), parameter('category', type=str), - parameter('details', type=str), + parameter('content', type=str), parameter('target', type=str), parameter('payoutAddress', type=str), parameter('trustees', type=list), @@ -126,7 +126,7 @@ def update_proposal(milestones, proposal_id, **kwargs): db.session.add(g.current_proposal) # Delete & re-add milestones - db.session.delete(g.current_proposal.milestones) + [session.delete(x) for x in g.current_proposal.milestones] if milestones: for mdata in milestones: m = Milestone( diff --git a/backend/migrations/versions/7e39b9773390_.py b/backend/migrations/versions/7e39b9773390_.py index 04f3ba2f..847caa51 100644 --- a/backend/migrations/versions/7e39b9773390_.py +++ b/backend/migrations/versions/7e39b9773390_.py @@ -22,7 +22,7 @@ def upgrade(): op.add_column('proposal', sa.Column('deadline_duration', sa.Integer(), nullable=False, server_default="5184000")) op.add_column('proposal', sa.Column('payout_address', sa.String(length=255), nullable=False, server_default="")) op.add_column('proposal', sa.Column('status', sa.String(length=255), nullable=False, server_default="LIVE")) - op.add_column('proposal', sa.Column('target', sa.BigInteger(), nullable=False, server_default="1")) + op.add_column('proposal', sa.Column('target', sa.String(length=255), nullable=False, server_default="1")) op.add_column('proposal', sa.Column('trustees', sa.String(length=1024), nullable=False, server_default="")) op.add_column('proposal', sa.Column('vote_duration', sa.Integer(), nullable=False, server_default="604800")) op.alter_column('proposal', 'proposal_address', @@ -44,7 +44,7 @@ def downgrade(): # ### commands auto generated by Alembic - please adjust! ### op.alter_column('proposal', 'proposal_address', existing_type=sa.VARCHAR(length=255), - nullable=False) + nullable=True) op.drop_column('proposal', 'vote_duration') op.drop_column('proposal', 'trustees') op.drop_column('proposal', 'target') From 84daa1cba98ab22589494797c6c1f9846b910f68 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Wed, 14 Nov 2018 12:59:48 -0500 Subject: [PATCH 08/32] Rename a bunch of fields to their original values. Get draft saves working. --- admin/src/components/Proposals/index.tsx | 4 +-- admin/src/types.ts | 3 +- backend/grant/comment/models.py | 6 ---- backend/grant/milestone/models.py | 6 ---- backend/grant/proposal/models.py | 3 -- backend/grant/proposal/views.py | 8 ++--- e2e/cypress/integration/create.spec.ts | 20 +++++------ frontend/client/components/Comment/index.tsx | 2 +- .../client/components/CreateFlow/Details.tsx | 8 ++--- .../components/CreateFlow/Milestones.tsx | 8 ++--- .../client/components/CreateFlow/Review.tsx | 4 +-- .../client/components/CreateFlow/example.ts | 8 ++--- .../client/components/CreateFlow/index.tsx | 1 + .../components/Profile/ProfileComment.tsx | 4 +-- frontend/client/components/Proposal/index.tsx | 6 +++- frontend/client/modules/create/utils.ts | 33 +++++++++++-------- frontend/client/modules/proposals/actions.ts | 2 +- frontend/client/modules/users/actions.ts | 12 +++---- frontend/stories/props.tsx | 2 +- frontend/types/comment.ts | 4 +-- frontend/types/proposal.ts | 4 +-- 21 files changed, 67 insertions(+), 81 deletions(-) diff --git a/admin/src/components/Proposals/index.tsx b/admin/src/components/Proposals/index.tsx index 37ffe224..d8fae60e 100644 --- a/admin/src/components/Proposals/index.tsx +++ b/admin/src/components/Proposals/index.tsx @@ -85,7 +85,7 @@ class ProposalItemNaked extends React.Component { }; render() { const p = this.props; - const body = showdownConverter.makeHtml(p.body); + const body = showdownConverter.makeHtml(p.content); return (
@@ -181,7 +181,7 @@ class ProposalItemNaked extends React.Component { (payoutPercent)
- {ms.body} + {ms.content} (body)
{/* content diff --git a/admin/src/types.ts b/admin/src/types.ts index d8a69e0c..0f14ebcf 100644 --- a/admin/src/types.ts +++ b/admin/src/types.ts @@ -3,7 +3,6 @@ export interface SocialMedia { socialMediaLink: string; } export interface Milestone { - body: string; content: string; dateCreated: string; dateEstimated: string; @@ -17,7 +16,7 @@ export interface Proposal { proposalAddress: string; dateCreated: number; title: string; - body: string; + content: string; stage: string; category: string; milestones: Milestone[]; diff --git a/backend/grant/comment/models.py b/backend/grant/comment/models.py index 564d2c2a..edc7bcc8 100644 --- a/backend/grant/comment/models.py +++ b/backend/grant/comment/models.py @@ -30,16 +30,10 @@ class CommentSchema(ma.Schema): "content", "proposal_id", "date_created", - "body", ) - body = ma.Method("get_body") - date_created = ma.Method("get_date_created") - def get_body(self, obj): - return obj.content - def get_date_created(self, obj): return dt_to_unix(obj.date_created) diff --git a/backend/grant/milestone/models.py b/backend/grant/milestone/models.py index ed91b39f..8ffffb2e 100644 --- a/backend/grant/milestone/models.py +++ b/backend/grant/milestone/models.py @@ -56,7 +56,6 @@ class MilestoneSchema(ma.Schema): # Fields to expose fields = ( "title", - "body", "content", "stage", "date_estimated", @@ -65,11 +64,6 @@ class MilestoneSchema(ma.Schema): "date_created", ) - body = ma.Method("get_body") - - def get_body(self, obj): - return obj.content - milestone_schema = MilestoneSchema() milestones_schema = MilestoneSchema(many=True) diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 7db5f0d0..e5ccbb43 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -197,9 +197,6 @@ class ProposalSchema(ma.Schema): team = ma.Nested("UserSchema", many=True) milestones = ma.Nested("MilestoneSchema", many=True) - def get_body(self, obj): - return obj.content - def get_proposal_id(self, obj): return obj.id diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index b737fa8b..31696c03 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -1,4 +1,4 @@ -from datetime import datetime +from dateutil.parser import parse from functools import wraps from flask import Blueprint, g @@ -126,13 +126,13 @@ def update_proposal(milestones, proposal_id, **kwargs): db.session.add(g.current_proposal) # Delete & re-add milestones - [session.delete(x) for x in g.current_proposal.milestones] + [db.session.delete(x) for x in g.current_proposal.milestones] if milestones: for mdata in milestones: m = Milestone( title=mdata["title"], - content=mdata["description"], - date_estimated=datetime.strptime(mdata["date"], '%B %Y'), + content=mdata["content"], + date_estimated=parse(mdata["dateEstimated"]), payout_percent=str(mdata["payoutPercent"]), immediate_payout=mdata["immediatePayout"], proposal_id=g.current_proposal.id diff --git a/e2e/cypress/integration/create.spec.ts b/e2e/cypress/integration/create.spec.ts index 98ef3477..ad274e26 100644 --- a/e2e/cypress/integration/create.spec.ts +++ b/e2e/cypress/integration/create.spec.ts @@ -22,8 +22,8 @@ describe("create proposal", () => { title: "e2e - smoke - create " + time, brief: "e2e brief", category: "Community", // .anticon-team - targetAmount: 5, - body: `#### e2e Proposal ${id} {enter} **created** ${time} `, + target: 5, + content: `#### e2e Proposal ${id} {enter} **created** ${time} `, team: [ { name: "Alisha Endtoend", @@ -41,7 +41,7 @@ describe("create proposal", () => { milestones: [ { title: `e2e Milestone ${id} 0`, - body: `e2e Milestone ${id} {enter} body 0`, + content: `e2e Milestone ${id} {enter} body 0`, date: { y: nextYear, m: "Jan", @@ -50,7 +50,7 @@ describe("create proposal", () => { }, { title: `e2e Milestone ${id} 1`, - body: `e2e Milestone ${id} {enter} body 1`, + content: `e2e Milestone ${id} {enter} body 1`, date: { y: nextYear, m: "Feb", @@ -67,8 +67,8 @@ describe("create proposal", () => { cy.get('.CreateFlow textarea[name="brief"]').type(proposal.brief); cy.contains("Select a category").click(); cy.get(".ant-select-dropdown li .anticon-team").click(); - cy.get('.CreateFlow input[name="amountToRaise"]').type( - "" + proposal.targetAmount + cy.get('.CreateFlow input[name="target"]').type( + "" + proposal.target ); cy.get(".CreateFlow-footer-button") .contains("Continue") @@ -109,7 +109,7 @@ describe("create proposal", () => { cy.get("@Continue").click(); // step 3 - cy.get(".DraftEditor-editorContainer > div").type(proposal.body); + cy.get(".DraftEditor-editorContainer > div").type(proposal.content); cy.get(".mde-tabs > :nth-child(2)").click(); cy.wait(1000); @@ -117,7 +117,7 @@ describe("create proposal", () => { // step 4 cy.get('input[name="title"]').type(proposal.milestones[0].title); - cy.get('textarea[name="body"]').type(proposal.milestones[0].body); + cy.get('textarea[name="content"]').type(proposal.milestones[0].content); cy.get('input[placeholder="Expected completion date"]').click(); cy.get(".ant-calendar-month-panel-next-year-btn").click(); cy.get(".ant-calendar-month-panel-month") @@ -135,9 +135,9 @@ describe("create proposal", () => { cy.get('input[name="title"]') .eq(1) .type(proposal.milestones[1].title); - cy.get('textarea[name="body"]') + cy.get('textarea[name="content"]') .eq(1) - .type(proposal.milestones[1].body); + .type(proposal.milestones[1].content); cy.get('input[placeholder="Expected completion date"]') .eq(1) .click(); diff --git a/frontend/client/components/Comment/index.tsx b/frontend/client/components/Comment/index.tsx index f69510bd..e458a12f 100644 --- a/frontend/client/components/Comment/index.tsx +++ b/frontend/client/components/Comment/index.tsx @@ -60,7 +60,7 @@ class Comment extends React.Component {
- +
diff --git a/frontend/client/components/CreateFlow/Details.tsx b/frontend/client/components/CreateFlow/Details.tsx index 4ff48a08..9c6e3cc1 100644 --- a/frontend/client/components/CreateFlow/Details.tsx +++ b/frontend/client/components/CreateFlow/Details.tsx @@ -4,7 +4,7 @@ import MarkdownEditor from 'components/MarkdownEditor'; import { ProposalDraft } from 'types'; interface State { - details: string; + content: string; } interface Props { @@ -16,7 +16,7 @@ export default class CreateFlowTeam extends React.Component { constructor(props: Props) { super(props); this.state = { - details: '', + content: '', ...(props.initialState || {}), }; } @@ -26,14 +26,14 @@ export default class CreateFlowTeam extends React.Component { ); } private handleChange = (markdown: string) => { - this.setState({ details: markdown }, () => { + this.setState({ content: markdown }, () => { this.props.updateForm(this.state); }); }; diff --git a/frontend/client/components/CreateFlow/Milestones.tsx b/frontend/client/components/CreateFlow/Milestones.tsx index 3a25424c..9e642f98 100644 --- a/frontend/client/components/CreateFlow/Milestones.tsx +++ b/frontend/client/components/CreateFlow/Milestones.tsx @@ -146,7 +146,7 @@ const MilestoneFields = ({
@@ -159,11 +159,7 @@ const MilestoneFields = ({ onChange(index, { ...milestone, dateEstimated })} diff --git a/frontend/client/components/CreateFlow/Review.tsx b/frontend/client/components/CreateFlow/Review.tsx index 78c15851..b7f52b8c 100644 --- a/frontend/client/components/CreateFlow/Review.tsx +++ b/frontend/client/components/CreateFlow/Review.tsx @@ -85,8 +85,8 @@ class CreateReview extends React.Component { name: 'Details', fields: [ { - key: 'details', - content: , + key: 'content', + content: , error: errors.details, }, ], diff --git a/frontend/client/components/CreateFlow/example.ts b/frontend/client/components/CreateFlow/example.ts index c4f3779a..654095c2 100644 --- a/frontend/client/components/CreateFlow/example.ts +++ b/frontend/client/components/CreateFlow/example.ts @@ -22,7 +22,7 @@ function generateRandomAddress() { const createExampleProposal = ( payoutAddress: string, trustees: string[], -): ProposalDraft => { +): Partial => { return { title: 'Grant.io T-Shirts', brief: "The most stylish wear, sporting your favorite brand's logo", @@ -55,7 +55,7 @@ const createExampleProposal = ( }, }, ], - details: + content: '![](https://i.imgur.com/aQagS0D.png)\n\nWe all know it, Grant.io is the bee\'s knees. But wouldn\'t it be great if you could show all your friends and family how much you love it? Well that\'s what we\'re here to offer today.\n\n# What We\'re Building\n\nWhy, T-Shirts of course! These beautiful shirts made out of 100% cotton and laser printed for long lasting goodness come from American Apparel. We\'ll be offering them in 4 styles:\n\n* Crew neck (wrinkled)\n* Crew neck (straight)\n* Scoop neck (fitted)\n* V neck (fitted)\n\nShirt sizings will be as follows:\n\n| Size | S | M | L | XL |\n|--------|-----|-----|-----|------|\n| **Width** | 18" | 20" | 22" | 24" |\n| **Length** | 28" | 29" | 30" | 31" |\n\n# Who We Are\n\nWe are the team behind grant.io. In addition to our software engineering experience, we have over 78 years of T-Shirt printing expertise combined. Sometimes I wake up at night and realize I was printing shirts in my dreams. Weird, man.\n\n# Expense Breakdown\n\n* $1,000 - A professional designer will hand-craft each letter on the shirt.\n* $500 - We\'ll get the shirt printed from 5 different factories and choose the best quality one.\n* $3,000 - The full run of prints, with 20 smalls, 20 mediums, and 20 larges.\n* $500 - Pizza. Lots of pizza.\n\n**Total**: $5,000', target: '5', payoutAddress, @@ -88,10 +88,6 @@ const createExampleProposal = ( ], deadlineDuration: 300, voteDuration: 60, - // Unused - proposalId: 123456789, - dateCreated: 0, - stage: '', }; }; diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index 17cc4df7..bdb51b0f 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -279,6 +279,7 @@ class CreateFlow extends React.Component { return true; } const errors = getCreateErrors(this.props.form); + console.log(errors); return !!Object.keys(errors).length; }; diff --git a/frontend/client/components/Profile/ProfileComment.tsx b/frontend/client/components/Profile/ProfileComment.tsx index e94279fe..d4169d4c 100644 --- a/frontend/client/components/Profile/ProfileComment.tsx +++ b/frontend/client/components/Profile/ProfileComment.tsx @@ -13,7 +13,7 @@ export default class Profile extends React.Component { render() { const { userName, - comment: { body, proposal, dateCreated }, + comment: { content, proposal, dateCreated }, } = this.props; return ( @@ -28,7 +28,7 @@ export default class Profile extends React.Component { {' '} {moment(dateCreated).from(Date.now())}
-
{body}
+
{content}
); } diff --git a/frontend/client/components/Proposal/index.tsx b/frontend/client/components/Proposal/index.tsx index d79d1039..6108fc14 100644 --- a/frontend/client/components/Proposal/index.tsx +++ b/frontend/client/components/Proposal/index.tsx @@ -144,7 +144,11 @@ export class ProposalDetail extends React.Component { ['is-expanded']: isBodyExpanded, })} > - {proposal ? : } + {proposal ? ( + + ) : ( + + )}
{showExpand && ( - )} ); } @@ -97,12 +84,6 @@ class CreateFlowTeam extends React.Component { this.props.updateForm({ team }); }; - private addMember = () => { - const team = [...this.state.team, { ...DEFAULT_STATE.team[0] }]; - this.setState({ team }); - this.props.updateForm({ team }); - }; - private removeMember = (index: number) => { const team = [ ...this.state.team.slice(0, index), From a7debd0bed16a733c7bbc17c38efdbe0afda8a32 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Wed, 14 Nov 2018 16:21:41 -0500 Subject: [PATCH 13/32] Fixup outstanding ts issues. --- frontend/client/components/CreateFlow/Review.tsx | 2 +- frontend/client/components/CreateFlow/Team.tsx | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/frontend/client/components/CreateFlow/Review.tsx b/frontend/client/components/CreateFlow/Review.tsx index b7f52b8c..1dd00a56 100644 --- a/frontend/client/components/CreateFlow/Review.tsx +++ b/frontend/client/components/CreateFlow/Review.tsx @@ -87,7 +87,7 @@ class CreateReview extends React.Component { { key: 'content', content: , - error: errors.details, + error: errors.content, }, ], }, diff --git a/frontend/client/components/CreateFlow/Team.tsx b/frontend/client/components/CreateFlow/Team.tsx index 1af6321b..82803cfe 100644 --- a/frontend/client/components/CreateFlow/Team.tsx +++ b/frontend/client/components/CreateFlow/Team.tsx @@ -1,6 +1,5 @@ import React from 'react'; import { connect } from 'react-redux'; -import { Icon } from 'antd'; import { TeamMember, ProposalDraft } from 'types'; import TeamMemberComponent from './TeamMember'; import './Team.less'; @@ -21,7 +20,7 @@ interface OwnProps { type Props = OwnProps & StateProps; -const MAX_TEAM_SIZE = 6; +// const MAX_TEAM_SIZE = 6; const DEFAULT_STATE: State = { team: [ { From e11be1569d4fc75aaf238d96cbff135339072221 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Wed, 14 Nov 2018 17:03:50 -0500 Subject: [PATCH 14/32] Publish proposal --- backend/grant/proposal/views.py | 2 +- frontend/client/api/api.ts | 9 +++++++++ frontend/client/modules/web3/actions.ts | 4 ++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index 31696c03..b93471b8 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -160,7 +160,7 @@ def delete_proposal_draft(): @endpoint.api( parameter('contractAddress', type=str, required=True) ) -def publish_proposal(contract_address): +def publish_proposal(proposal_id, contract_address): try: g.current_proposal.proposal_address = contract_address g.current_proposal.publish() diff --git a/frontend/client/api/api.ts b/frontend/client/api/api.ts index f106f2ed..931bc8c6 100644 --- a/frontend/client/api/api.ts +++ b/frontend/client/api/api.ts @@ -116,3 +116,12 @@ export function putProposal(proposal: ProposalDraft): Promise<{ data: ProposalDr const { proposalId, stage, dateCreated, team, ...rest } = proposal; return axios.put(`/api/v1/proposals/${proposal.proposalId}`, rest); } + +export function putProposalPublish( + proposal: ProposalDraft, + contractAddress: string, +): Promise<{ data: ProposalDraft }> { + return axios.put(`/api/v1/proposals/${proposal.proposalId}/publish`, { + contractAddress, + }); +} diff --git a/frontend/client/modules/web3/actions.ts b/frontend/client/modules/web3/actions.ts index 4dcf6f2c..183348e2 100644 --- a/frontend/client/modules/web3/actions.ts +++ b/frontend/client/modules/web3/actions.ts @@ -4,6 +4,7 @@ import getWeb3 from 'lib/getWeb3'; import getContract, { WrongNetworkError } from 'lib/getContract'; import { sleep } from 'utils/helpers'; import { web3ErrorToString } from 'utils/web3'; +import { putProposalPublish } from 'api/api'; import { fetchProposal, fetchProposals } from 'modules/proposals/actions'; import { proposalToContractData } from 'modules/create/utils'; import { AppState } from 'store/reducers'; @@ -139,8 +140,7 @@ export function createCrowdFund(CrowdFundFactoryContract: any, proposal: Proposa .once('confirmation', async (_: any, receipt: any) => { const crowdFundContractAddress = receipt.events.ContractCreated.returnValues.newAddress; - // TODO: Publish proposal - // await postProposal(proposal); + await putProposalPublish(proposal, crowdFundContractAddress); dispatch({ type: types.CROWD_FUND_CREATED, payload: crowdFundContractAddress, From 50cdf45882f296c118ee526987726b3ffaf746f1 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Thu, 15 Nov 2018 11:02:16 -0500 Subject: [PATCH 15/32] Draft deleting. --- backend/grant/proposal/models.py | 6 +- backend/grant/proposal/views.py | 83 +--------------- frontend/client/api/api.ts | 4 + .../client/components/DraftList/index.tsx | 99 ++++++++++++++----- frontend/client/modules/create/actions.ts | 7 ++ frontend/client/modules/create/reducers.ts | 24 +++++ frontend/client/modules/create/sagas.ts | 25 ++++- frontend/client/modules/create/types.ts | 5 + 8 files changed, 141 insertions(+), 112 deletions(-) diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 6f8b2657..d8844e06 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -73,9 +73,9 @@ class Proposal(db.Model): # Relations team = db.relationship("User", secondary=proposal_team) - comments = db.relationship(Comment, backref="proposal", lazy=True) - updates = db.relationship(ProposalUpdate, backref="proposal", lazy=True) - milestones = db.relationship("Milestone", backref="proposal", lazy=True) + comments = db.relationship(Comment, backref="proposal", lazy=True, cascade="all, delete-orphan") + updates = db.relationship(ProposalUpdate, backref="proposal", lazy=True, cascade="all, delete-orphan") + milestones = db.relationship("Milestone", backref="proposal", lazy=True, cascade="all, delete-orphan") def __init__( self, diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index b93471b8..30de3b34 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -147,7 +147,7 @@ def update_proposal(milestones, proposal_id, **kwargs): @blueprint.route("/", methods=["DELETE"]) @requires_team_member_auth @endpoint.api() -def delete_proposal_draft(): +def delete_proposal_draft(proposal_id): if g.current_proposal.status != 'DRAFT': return {"message": "Cannot delete non-draft proposals"}, 400 db.session.delete(g.current_proposal) @@ -171,87 +171,6 @@ def publish_proposal(proposal_id, contract_address): return proposal_schema.dump(g.current_proposal), 200 -# @blueprint.route("/", methods=["POST"]) -# @requires_sm -# @endpoint.api( -# parameter('crowdFundContractAddress', type=str, required=True), -# parameter('content', type=str, required=True), -# parameter('title', type=str, required=True), -# parameter('milestones', type=list, required=True), -# parameter('category', type=str, required=True), -# parameter('team', type=list, required=True) -# ) -# def make_proposal(crowd_fund_contract_address, content, title, milestones, category, team): -# from grant.user.models import User -# existing_proposal = Proposal.query.filter_by(proposal_address=crowd_fund_contract_address).first() -# if existing_proposal: -# return {"message": "Oops! Something went wrong."}, 409 - -# proposal = Proposal.create( -# stage="FUNDING_REQUIRED", -# proposal_address=crowd_fund_contract_address, -# content=content, -# title=title, -# category=category -# ) - -# db.session.add(proposal) - -# if not len(team) > 0: -# return {"message": "Team must be at least 1"}, 400 - -# for team_member in team: -# account_address = team_member.get("accountAddress") -# display_name = team_member.get("displayName") -# email_address = team_member.get("emailAddress") -# title = team_member.get("title") -# user = User.query.filter( -# (User.account_address == account_address) | (User.email_address == email_address)).first() -# if not user: -# user = User( -# account_address=account_address, -# email_address=email_address, -# display_name=display_name, -# title=title -# ) -# db.session.add(user) -# db.session.flush() - -# avatar_data = team_member.get("avatar") -# if avatar_data: -# avatar = Avatar(image_url=avatar_data.get('link'), user_id=user.id) -# db.session.add(avatar) - -# social_medias = team_member.get("socialMedias") -# if social_medias: -# for social_media in social_medias: -# sm = SocialMedia(social_media_link=social_media.get("link"), user_id=user.id) -# db.session.add(sm) - -# proposal.team.append(user) - -# for each_milestone in milestones: -# m = Milestone( -# title=each_milestone["title"], -# content=each_milestone["description"], -# date_estimated=datetime.strptime(each_milestone["date"], '%B %Y'), -# payout_percent=str(each_milestone["payoutPercent"]), -# immediate_payout=each_milestone["immediatePayout"], -# proposal_id=proposal.id -# ) - -# db.session.add(m) - -# try: -# db.session.commit() -# except IntegrityError as e: -# print(e) -# return {"message": "Oops! Something went wrong."}, 409 - -# results = proposal_schema.dump(proposal) -# return results, 201 - - @blueprint.route("//updates", methods=["GET"]) @endpoint.api() def get_proposal_updates(proposal_id): diff --git a/frontend/client/api/api.ts b/frontend/client/api/api.ts index 931bc8c6..48718e40 100644 --- a/frontend/client/api/api.ts +++ b/frontend/client/api/api.ts @@ -111,6 +111,10 @@ export function postProposalDraft(): Promise<{ data: ProposalDraft }> { return axios.post('/api/v1/proposals/drafts'); } +export function deleteProposalDraft(proposalId: number): Promise { + return axios.delete(`/api/v1/proposals/${proposalId}`); +} + export function putProposal(proposal: ProposalDraft): Promise<{ data: ProposalDraft }> { // Exclude some keys const { proposalId, stage, dateCreated, team, ...rest } = proposal; diff --git a/frontend/client/components/DraftList/index.tsx b/frontend/client/components/DraftList/index.tsx index cfb0fb59..a1a22e7f 100644 --- a/frontend/client/components/DraftList/index.tsx +++ b/frontend/client/components/DraftList/index.tsx @@ -1,9 +1,10 @@ import React from 'react'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; -import { List, Button, Divider, Spin, Alert } from 'antd'; +import { List, Button, Divider, Spin, Popconfirm, message } from 'antd'; +import Placeholder from 'components/Placeholder'; import { ProposalDraft } from 'types'; -import { fetchDrafts, createDraft } from 'modules/create/actions'; +import { fetchDrafts, createDraft, deleteDraft } from 'modules/create/actions'; import { AppState } from 'store/reducers'; import './style.less'; @@ -13,11 +14,14 @@ interface StateProps { fetchDraftsError: AppState['create']['fetchDraftsError']; isCreatingDraft: AppState['create']['isCreatingDraft']; createDraftError: AppState['create']['createDraftError']; + isDeletingDraft: AppState['create']['isDeletingDraft']; + deleteDraftError: AppState['create']['deleteDraftError']; } interface DispatchProps { fetchDrafts: typeof fetchDrafts; createDraft: typeof createDraft; + deleteDraft: typeof deleteDraft; } interface OwnProps { @@ -26,28 +30,52 @@ interface OwnProps { type Props = StateProps & DispatchProps & OwnProps; -class DraftList extends React.Component { +interface State { + deletingId: number | null; +} + +class DraftList extends React.Component { + state: State = { + deletingId: null, + }; + componentWillMount() { this.props.fetchDrafts(); } componentDidUpdate(prevProps: Props) { - const { drafts, createIfNone } = this.props; + const { + drafts, + createIfNone, + isDeletingDraft, + deleteDraftError, + createDraftError, + } = this.props; if (createIfNone && drafts && !prevProps.drafts && !drafts.length) { this.createDraft(); } + if (prevProps.isDeletingDraft && !isDeletingDraft) { + this.setState({ deletingId: null }); + } + if (deleteDraftError && prevProps.deleteDraftError !== deleteDraftError) { + message.error('Failed to delete draft', 3); + } + if (createDraftError && prevProps.createDraftError !== createDraftError) { + message.error('Failed to create draft', 3); + } } render() { - const { drafts, isCreatingDraft, createDraftError } = this.props; + const { drafts, isCreatingDraft } = this.props; + const { deletingId } = this.state; - if (!drafts) { + if (!drafts || isCreatingDraft) { return ; } - return ( -
-

Your drafts

+ let draftsEl; + if (drafts.length) { + draftsEl = ( { Edit , - Delete, + this.deleteDraft(d.proposalId)} + > + Delete + , ]; return ( - - Untitled proposal} - description={d.brief || No description} - /> - + + + Untitled proposal} + description={d.brief || No description} + /> + + ); }} /> + ); + } else { + draftsEl = ( + + ); + } + + return ( +
+

Your drafts

+ {draftsEl} or - {createDraftError && ( - - )}
- {index !== 0 && ( - - )}
); } - - private removeMember = () => { - this.props.onRemove(this.props.index); - }; } diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index bdb51b0f..e94921a0 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -190,6 +190,7 @@ class CreateFlow extends React.Component {
Date: Fri, 16 Nov 2018 11:57:03 -0500 Subject: [PATCH 20/32] Add warnings to publish. Warn if outstanding invites. --- .../client/components/CreateFlow/Details.tsx | 8 ++- .../CreateFlow/PubishWarningModal.tsx | 55 +++++++++++++++++++ .../CreateFlow/PublishWarningModal.less | 13 +++++ .../client/components/CreateFlow/Review.less | 6 ++ .../client/components/CreateFlow/Review.tsx | 10 +++- .../client/components/CreateFlow/index.tsx | 28 ++++++++-- frontend/client/modules/create/utils.ts | 15 +++++ 7 files changed, 125 insertions(+), 10 deletions(-) create mode 100644 frontend/client/components/CreateFlow/PubishWarningModal.tsx create mode 100644 frontend/client/components/CreateFlow/PublishWarningModal.less diff --git a/frontend/client/components/CreateFlow/Details.tsx b/frontend/client/components/CreateFlow/Details.tsx index 9c6e3cc1..53e7a05d 100644 --- a/frontend/client/components/CreateFlow/Details.tsx +++ b/frontend/client/components/CreateFlow/Details.tsx @@ -33,8 +33,10 @@ export default class CreateFlowTeam extends React.Component { } private handleChange = (markdown: string) => { - this.setState({ content: markdown }, () => { - this.props.updateForm(this.state); - }); + if (markdown !== this.state.content) { + this.setState({ content: markdown }, () => { + this.props.updateForm(this.state); + }); + } }; } diff --git a/frontend/client/components/CreateFlow/PubishWarningModal.tsx b/frontend/client/components/CreateFlow/PubishWarningModal.tsx new file mode 100644 index 00000000..f4df5669 --- /dev/null +++ b/frontend/client/components/CreateFlow/PubishWarningModal.tsx @@ -0,0 +1,55 @@ +import React from 'react'; +import { Modal, Alert } from 'antd'; +import { getCreateWarnings } from 'modules/create/utils'; +import { ProposalDraft } from 'types'; +import './PublishWarningModal.less'; + +interface Props { + proposal: ProposalDraft | null; + isVisible: boolean; + handleClose(): void; + handlePublish(): void; +} + +export default class PublishWarningModal extends React.Component { + render() { + const { proposal, isVisible, handleClose, handlePublish } = this.props; + const warnings = proposal ? getCreateWarnings(proposal) : []; + + return ( + Confirm publish} + visible={isVisible} + okText="Confirm publish" + cancelText="Never mind" + onOk={handlePublish} + onCancel={handleClose} + > +
+ {warnings.length && ( + +
    + {warnings.map(w => ( +
  • {w}
  • + ))} +
+

You can still publish, despite these warnings.

+ + } + /> + )} +

+ Are you sure you’re ready to publish your proposal? Once you’ve done so, you + won't be able to change certain fields such as: target amount, payout address, + team, trustees, deadline & vote durations. +

+
+
+ ); + } +} diff --git a/frontend/client/components/CreateFlow/PublishWarningModal.less b/frontend/client/components/CreateFlow/PublishWarningModal.less new file mode 100644 index 00000000..c475d354 --- /dev/null +++ b/frontend/client/components/CreateFlow/PublishWarningModal.less @@ -0,0 +1,13 @@ +.PublishWarningModal { + .ant-alert { + margin-bottom: 1rem; + + ul { + padding-top: 0.25rem; + } + + p:last-child { + margin-bottom: 0; + } + } +} \ No newline at end of file diff --git a/frontend/client/components/CreateFlow/Review.less b/frontend/client/components/CreateFlow/Review.less index e5756f9a..c108d39b 100644 --- a/frontend/client/components/CreateFlow/Review.less +++ b/frontend/client/components/CreateFlow/Review.less @@ -109,4 +109,10 @@ } } } + + &-invites { + margin-top: 1rem; + font-size: 0.9rem; + opacity: 0.6; + } } diff --git a/frontend/client/components/CreateFlow/Review.tsx b/frontend/client/components/CreateFlow/Review.tsx index 1dd00a56..0adf802c 100644 --- a/frontend/client/components/CreateFlow/Review.tsx +++ b/frontend/client/components/CreateFlow/Review.tsx @@ -75,7 +75,7 @@ class CreateReview extends React.Component { fields: [ { key: 'team', - content: , + content: , error: errors.team && errors.team.join(' '), }, ], @@ -209,7 +209,10 @@ const ReviewMilestones = ({ ); -const ReviewTeam = ({ team }: { team: ProposalDraft['team'] }) => ( +const ReviewTeam: React.SFC<{ + team: ProposalDraft['team']; + invites: ProposalDraft['invites']; +}> = ({ team, invites }) => (
{team.map((u, idx) => (
@@ -220,5 +223,8 @@ const ReviewTeam = ({ team }: { team: ProposalDraft['team'] }) => (
))} + {!!invites.length && ( +
+ {invites.length} invite(s) pending
+ )}
); diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index e94921a0..a84b6e59 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -14,6 +14,7 @@ import Governance from './Governance'; import Review from './Review'; import Preview from './Preview'; import Final from './Final'; +import PublishWarningModal from './PubishWarningModal'; import createExampleProposal from './example'; import { createActions } from 'modules/create'; import { ProposalDraft } from 'types'; @@ -120,6 +121,7 @@ type Props = OwnProps & StateProps & DispatchProps & RouteComponentProps; interface State { step: CREATE_STEP; isPreviewing: boolean; + isShowingPublishWarning: boolean; isPublishing: boolean; isExample: boolean; } @@ -157,7 +159,7 @@ class CreateFlow extends React.Component { render() { const { isSavingDraft } = this.props; - const { step, isPreviewing, isPublishing } = this.state; + const { step, isPreviewing, isPublishing, isShowingPublishWarning } = this.state; const info = STEP_INFO[step]; const currentIndex = STEP_ORDER.indexOf(step); @@ -190,7 +192,7 @@ class CreateFlow extends React.Component {
{
); } @@ -272,7 +280,10 @@ class CreateFlow extends React.Component { }; private startPublish = () => { - this.setState({ isPublishing: true }); + this.setState({ + isPublishing: true, + isShowingPublishWarning: false, + }); }; private checkFormErrors = () => { @@ -280,7 +291,6 @@ class CreateFlow extends React.Component { return true; } const errors = getCreateErrors(this.props.form); - console.log(errors); return !!Object.keys(errors).length; }; @@ -296,6 +306,14 @@ class CreateFlow extends React.Component { } }; + private openPublishWarning = () => { + this.setState({ isShowingPublishWarning: true }); + }; + + private closePublishWarning = () => { + this.setState({ isShowingPublishWarning: false }); + }; + private fillInExample = () => { const { accounts } = this.props; const [payoutAddress, ...trustees] = accounts; diff --git a/frontend/client/modules/create/utils.ts b/frontend/client/modules/create/utils.ts index a348ed0a..ed8d37d1 100644 --- a/frontend/client/modules/create/utils.ts +++ b/frontend/client/modules/create/utils.ts @@ -184,6 +184,21 @@ export function getCreateTeamMemberError(user: TeamMember) { return ''; } +export function getCreateWarnings(form: Partial): string[] { + const warnings = []; + + // Warn about pending invites + if (form.invites!.length) { + warnings.push(` + You still have pending team invitations. If you publish before they + are accepted, your team will be locked in and they won’t be able to + accept join. + `); + } + + return warnings; +} + function milestoneToMilestoneAmount(milestone: CreateMilestone, raiseGoal: Wei) { return raiseGoal.divn(100).mul(Wei(milestone.payoutPercent)); } From df9ea60300461e8b66f78298f9837cc763c8d9cb Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Fri, 16 Nov 2018 13:50:47 -0500 Subject: [PATCH 21/32] Invite tab on profile, allow accepting and rejecting invites. --- backend/grant/proposal/models.py | 38 +++++ backend/grant/proposal/views.py | 6 + backend/grant/user/views.py | 29 +++- frontend/client/api/api.ts | 25 +++- .../components/Profile/ProfileInvite.less | 38 +++++ .../components/Profile/ProfileInvite.tsx | 94 ++++++++++++ frontend/client/components/Profile/index.tsx | 45 +++++- frontend/client/modules/users/actions.ts | 57 +++++++- frontend/client/modules/users/reducers.ts | 137 +++++++++++++++--- frontend/client/modules/users/types.ts | 10 ++ 10 files changed, 448 insertions(+), 31 deletions(-) create mode 100644 frontend/client/components/Profile/ProfileInvite.less create mode 100644 frontend/client/components/Profile/ProfileInvite.tsx diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index c9e8db11..59510f93 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -1,7 +1,9 @@ import datetime from typing import List +from sqlalchemy import func from grant.comment.models import Comment +from grant.user.models import User from grant.extensions import ma, db from grant.utils.misc import dt_to_unix from grant.utils.exceptions import ValidationException @@ -47,6 +49,21 @@ class ProposalTeamInvite(db.Model): self.accepted = accepted self.date_created = datetime.datetime.now() + @staticmethod + def get_pending_for_user(user): + print('Hello') + print(str( + ProposalTeamInvite.query.filter( + (func.lower(User.account_address) == func.lower(ProposalTeamInvite.address)) | + (func.lower(User.email_address) == func.lower(ProposalTeamInvite.address)) + ) + )) + return ProposalTeamInvite.query.filter( + ProposalTeamInvite.accepted == None, + (func.lower(User.account_address) == func.lower(ProposalTeamInvite.address)) | + (func.lower(User.email_address) == func.lower(ProposalTeamInvite.address)) + ).all() + class ProposalUpdate(db.Model): __tablename__ = "proposal_update" @@ -278,3 +295,24 @@ class ProposalTeamInviteSchema(ma.Schema): proposal_team_invite_schema = ProposalTeamInviteSchema() proposal_team_invites_schema = ProposalTeamInviteSchema(many=True) + +# TODO: Find a way to extend ProposalTeamInviteSchema instead of redefining +class InviteWithProposalSchema(ma.Schema): + class Meta: + model = ProposalTeamInvite + fields = ( + "id", + "date_created", + "address", + "accepted", + "proposal" + ) + + date_created = ma.Method("get_date_created") + proposal = ma.Nested("ProposalSchema") + + def get_date_created(self, obj): + return dt_to_unix(obj.date_created) + +invite_with_proposal_schema = InviteWithProposalSchema() +invites_with_proposal_schema = InviteWithProposalSchema(many=True) \ No newline at end of file diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index db3952bd..4f940133 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -237,6 +237,12 @@ def post_proposal_team_invite(proposal_id, address): if user: email = user.email_address if is_email(email): + print('team_invite_args') + print({ + 'user': user, + 'inviter': g.current_user, + 'proposal': g.current_proposal + }) send_email(email, 'team_invite', { 'user': user, 'inviter': g.current_user, diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index 1878cede..f74a8e0f 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -1,7 +1,7 @@ from flask import Blueprint, g from flask_yoloapi import endpoint, parameter -from grant.proposal.models import Proposal, proposal_team +from grant.proposal.models import Proposal, proposal_team, ProposalTeamInvite, invites_with_proposal_schema from grant.utils.auth import requires_sm, requires_same_user_auth, verify_signed_auth, BadSignatureException from .models import User, SocialMedia, Avatar, users_schema, user_schema, db @@ -157,3 +157,30 @@ def update_user(user_identity, display_name, title, social_medias, avatar): db.session.commit() result = user_schema.dump(user) return result + +@blueprint.route("//invites", methods=["GET"]) +@requires_same_user_auth +@endpoint.api() +def get_user_invites(user_identity): + invites = ProposalTeamInvite.get_pending_for_user(g.current_user) + return invites_with_proposal_schema.dump(invites) + +@blueprint.route("//invites//respond", methods=["PUT"]) +@requires_same_user_auth +@endpoint.api( + parameter('response', type=bool, required=True) +) +def respond_to_invite(user_identity, invite_id, response): + invite = ProposalTeamInvite.query.filter_by(id=invite_id).first() + if not invite: + return {"message": "No invite found with id {}".format(invite_id)}, 404 + + invite.accepted = response + db.session.add(invite) + + if invite.accepted: + invite.proposal.team.append(g.current_user) + db.session.add(invite) + + db.session.commit() + return None, 200 diff --git a/frontend/client/api/api.ts b/frontend/client/api/api.ts index 60f20f3a..0a5070ae 100644 --- a/frontend/client/api/api.ts +++ b/frontend/client/api/api.ts @@ -1,5 +1,12 @@ import axios from './axios'; -import { Proposal, ProposalDraft, TeamMember, Update, TeamInvite } from 'types'; +import { + Proposal, + ProposalDraft, + TeamMember, + Update, + TeamInvite, + TeamInviteWithProposal, +} from 'types'; import { formatTeamMemberForPost, formatTeamMemberFromGet, @@ -143,3 +150,19 @@ export function deleteProposalInvite( ): Promise<{ data: TeamInvite }> { return axios.delete(`/api/v1/proposals/${proposalId}/invite/${inviteIdOrAddress}`); } + +export function fetchUserInvites( + userid: string | number, +): Promise<{ data: TeamInviteWithProposal[] }> { + return axios.get(`/api/v1/users/${userid}/invites`); +} + +export function putInviteResponse( + userid: string | number, + inviteid: string | number, + response: boolean, +): Promise<{ data: void }> { + return axios.put(`/api/v1/users/${userid}/invites/${inviteid}/respond`, { + response, + }); +} diff --git a/frontend/client/components/Profile/ProfileInvite.less b/frontend/client/components/Profile/ProfileInvite.less new file mode 100644 index 00000000..22c82983 --- /dev/null +++ b/frontend/client/components/Profile/ProfileInvite.less @@ -0,0 +1,38 @@ +.ProfileInvite { + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 1.2rem; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + margin-bottom: 1rem; + + &-info { + &-title { + font-size: 1.2rem; + font-weight: 600; + margin-bottom: 0.5rem; + } + + &-brief { + font-size: 0.9rem; + margin-bottom: 0.6rem; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + + &-inviter { + font-size: 0.8rem; + opacity: 0.6; + } + } + + &-actions { + display: flex; + + .ant-btn { + padding: 0 0.8rem !important; + margin-right: 0.5rem; + } + } +} \ No newline at end of file diff --git a/frontend/client/components/Profile/ProfileInvite.tsx b/frontend/client/components/Profile/ProfileInvite.tsx new file mode 100644 index 00000000..2281eab7 --- /dev/null +++ b/frontend/client/components/Profile/ProfileInvite.tsx @@ -0,0 +1,94 @@ +import React from 'react'; +import { connect } from 'react-redux'; +import { Button, Popconfirm, message } from 'antd'; +import { respondToInvite } from 'modules/users/actions'; +import { TeamInviteWithResponse } from 'modules/users/reducers'; +import './ProfileInvite.less'; + +interface DispatchProps { + respondToInvite: typeof respondToInvite; +} + +interface OwnProps { + userId: string | number; + invite: TeamInviteWithResponse; +} + +type Props = DispatchProps & OwnProps; + +interface State { + isAccepting: boolean; + isRejecting: boolean; +} + +class ProfileInvite extends React.Component { + state: State = { + isAccepting: false, + isRejecting: false, + }; + + componentDidUpdate(prevProps: Props) { + const { invite } = this.props; + if (prevProps.invite !== invite && invite.respondError) { + this.setState({ + isAccepting: false, + isRejecting: false, + }); + message.error('Failed to respond to invitation', 3); + } + } + + render() { + const { invite } = this.props; + const { isAccepting, isRejecting } = this.state; + const { proposal } = invite; + const inviter = proposal.team[0] || { name: 'Unknown user' }; + return ( +
+
+
{proposal.title}
+
{proposal.brief}
+
created by {inviter.name}
+
+
+
+
+ ); + } + + private accept = () => { + const { userId, invite } = this.props; + this.setState({ isAccepting: true }); + this.props.respondToInvite(userId, invite.id, true); + }; + + private reject = () => { + const { userId, invite } = this.props; + this.setState({ isRejecting: true }); + this.props.respondToInvite(userId, invite.id, false); + }; +} + +export default connect<{}, DispatchProps, OwnProps, {}>( + undefined, + { respondToInvite }, +)(ProfileInvite); diff --git a/frontend/client/components/Profile/index.tsx b/frontend/client/components/Profile/index.tsx index d18ed421..88a16a5a 100644 --- a/frontend/client/components/Profile/index.tsx +++ b/frontend/client/components/Profile/index.tsx @@ -5,12 +5,13 @@ import { usersActions } from 'modules/users'; import { AppState } from 'store/reducers'; import { connect } from 'react-redux'; import { compose } from 'recompose'; -import { Spin, Tabs, Badge } from 'antd'; +import { Spin, Tabs, Badge, message } from 'antd'; import HeaderDetails from 'components/HeaderDetails'; import ProfileUser from './ProfileUser'; import ProfileProposal from './ProfileProposal'; import ProfileComment from './ProfileComment'; -import PlaceHolder from 'components/Placeholder'; +import ProfileInvite from './ProfileInvite'; +import Placeholder from 'components/Placeholder'; import Exception from 'pages/exception'; import './style.less'; @@ -24,6 +25,7 @@ interface DispatchProps { fetchUserCreated: typeof usersActions['fetchUserCreated']; fetchUserFunded: typeof usersActions['fetchUserFunded']; fetchUserComments: typeof usersActions['fetchUserComments']; + fetchUserInvites: typeof usersActions['fetchUserInvites']; } type Props = RouteComponentProps & StateProps & DispatchProps; @@ -53,6 +55,8 @@ class Profile extends React.Component { const user = this.props.usersMap[userLookupParam]; const waiting = !user || !user.hasFetched; + // TODO: Replace with userid checks + const isAuthedUser = user && authUser && user.ethAddress === authUser.ethAddress; if (waiting) { return ; @@ -62,10 +66,11 @@ class Profile extends React.Component { return ; } - const { createdProposals, fundedProposals, comments } = user; + const { createdProposals, fundedProposals, comments, invites } = user; const noneCreated = user.hasFetchedCreated && createdProposals.length === 0; const noneFunded = user.hasFetchedFunded && fundedProposals.length === 0; const noneCommented = user.hasFetchedComments && comments.length === 0; + const noneInvites = user.hasFetchedInvites && invites.length === 0; return (
@@ -85,7 +90,7 @@ class Profile extends React.Component { >
{noneCreated && ( - + )} {createdProposals.map(p => ( @@ -98,7 +103,7 @@ class Profile extends React.Component { disabled={!user.hasFetchedFunded} >
- {noneFunded && } + {noneFunded && } {createdProposals.map(p => ( ))} @@ -110,23 +115,48 @@ class Profile extends React.Component { disabled={!user.hasFetchedComments} >
- {noneCommented && } + {noneCommented && } {comments.map(c => ( ))}
+ {isAuthedUser && ( + +
+ {noneInvites && ( + + )} + {invites.map(invite => ( + + ))} +
+
+ )}
); } private fetchData() { - const userLookupId = this.props.match.params.id; + const { match } = this.props; + const userLookupId = match.params.id; if (userLookupId) { this.props.fetchUser(userLookupId); this.props.fetchUserCreated(userLookupId); this.props.fetchUserFunded(userLookupId); this.props.fetchUserComments(userLookupId); + this.props.fetchUserInvites(userLookupId); } } } @@ -152,6 +182,7 @@ const withConnect = connect( fetchUserCreated: usersActions.fetchUserCreated, fetchUserFunded: usersActions.fetchUserFunded, fetchUserComments: usersActions.fetchUserComments, + fetchUserInvites: usersActions.fetchUserInvites, }, ); diff --git a/frontend/client/modules/users/actions.ts b/frontend/client/modules/users/actions.ts index 1c934b87..bfd4a24d 100644 --- a/frontend/client/modules/users/actions.ts +++ b/frontend/client/modules/users/actions.ts @@ -1,6 +1,12 @@ import { UserProposal, UserComment, TeamMember } from 'types'; import types from './types'; -import { getUser, updateUser as apiUpdateUser, getProposals } from 'api/api'; +import { + getUser, + updateUser as apiUpdateUser, + getProposals, + fetchUserInvites as apiFetchUserInvites, + putInviteResponse, +} from 'api/api'; import { Dispatch } from 'redux'; import { Proposal } from 'types'; import BN from 'bn.js'; @@ -100,6 +106,55 @@ export function fetchUserComments(userFetchId: string) { }; } +export function fetchUserInvites(userFetchId: string) { + return async (dispatch: Dispatch) => { + dispatch({ + type: types.FETCH_USER_INVITES_PENDING, + payload: { userFetchId }, + }); + + try { + const res = await apiFetchUserInvites(userFetchId); + const invites = res.data.sort((a, b) => (a.dateCreated > b.dateCreated ? -1 : 1)); + dispatch({ + type: types.FETCH_USER_INVITES_FULFILLED, + payload: { userFetchId, invites }, + }); + } catch (error) { + dispatch({ + type: types.FETCH_USER_INVITES_REJECTED, + payload: { userFetchId, error }, + }); + } + }; +} + +export function respondToInvite( + userId: string | number, + inviteId: string | number, + response: boolean, +) { + return async (dispatch: Dispatch) => { + dispatch({ + type: types.RESPOND_TO_INVITE_PENDING, + payload: { userId, inviteId, response }, + }); + + try { + await putInviteResponse(userId, inviteId, response); + dispatch({ + type: types.RESPOND_TO_INVITE_FULFILLED, + payload: { userId, inviteId, response }, + }); + } catch (error) { + dispatch({ + type: types.RESPOND_TO_INVITE_REJECTED, + payload: { userId, inviteId, error }, + }); + } + }; +} + const mockModifyProposals = (p: Proposal): UserProposal => { const { proposalId, title, team } = p; return { diff --git a/frontend/client/modules/users/reducers.ts b/frontend/client/modules/users/reducers.ts index 02f8d882..58626eac 100644 --- a/frontend/client/modules/users/reducers.ts +++ b/frontend/client/modules/users/reducers.ts @@ -1,8 +1,13 @@ import lodash from 'lodash'; -import { UserProposal, UserComment } from 'types'; +import { UserProposal, UserComment, TeamInviteWithProposal } from 'types'; import types from './types'; import { TeamMember } from 'types'; +export interface TeamInviteWithResponse extends TeamInviteWithProposal { + isResponding: boolean; + respondError: number | null; +} + export interface UserState extends TeamMember { isFetching: boolean; hasFetched: boolean; @@ -17,10 +22,14 @@ export interface UserState extends TeamMember { hasFetchedFunded: boolean; fetchErrorFunded: number | null; fundedProposals: UserProposal[]; - isFetchingCommments: boolean; + isFetchingComments: boolean; hasFetchedComments: boolean; fetchErrorComments: number | null; comments: UserComment[]; + isFetchingInvites: boolean; + hasFetchedInvites: boolean; + fetchErrorInvites: number | null; + invites: TeamInviteWithResponse[]; } export interface UsersState { @@ -51,10 +60,14 @@ export const INITIAL_USER_STATE: UserState = { hasFetchedFunded: false, fetchErrorFunded: null, fundedProposals: [], - isFetchingCommments: false, + isFetchingComments: false, hasFetchedComments: false, fetchErrorComments: null, comments: [], + isFetchingInvites: false, + hasFetchedInvites: false, + fetchErrorInvites: null, + invites: [], }; export const INITIAL_STATE: UsersState = { @@ -66,6 +79,7 @@ export default (state = INITIAL_STATE, action: any) => { const userFetchId = payload && payload.userFetchId; const proposals = payload && payload.proposals; const comments = payload && payload.comments; + const invites = payload && payload.invites; const errorStatus = (payload && payload.error && @@ -75,101 +89,151 @@ export default (state = INITIAL_STATE, action: any) => { switch (action.type) { // fetch case types.FETCH_USER_PENDING: - return updateStateFetch(state, userFetchId, { isFetching: true, fetchError: null }); + return updateUserState(state, userFetchId, { isFetching: true, fetchError: null }); case types.FETCH_USER_FULFILLED: - return updateStateFetch( + return updateUserState( state, userFetchId, { isFetching: false, hasFetched: true }, payload.user, ); case types.FETCH_USER_REJECTED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetching: false, hasFetched: true, fetchError: errorStatus, }); // update case types.UPDATE_USER_PENDING: - return updateStateFetch(state, payload.user.ethAddress, { + return updateUserState(state, payload.user.ethAddress, { isUpdating: true, updateError: null, }); case types.UPDATE_USER_FULFILLED: - return updateStateFetch( + return updateUserState( state, payload.user.ethAddress, { isUpdating: false }, payload.user, ); case types.UPDATE_USER_REJECTED: - return updateStateFetch(state, payload.user.ethAddress, { + return updateUserState(state, payload.user.ethAddress, { isUpdating: false, updateError: errorStatus, }); // created proposals case types.FETCH_USER_CREATED_PENDING: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingCreated: true, fetchErrorCreated: null, }); case types.FETCH_USER_CREATED_FULFILLED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingCreated: false, hasFetchedCreated: true, createdProposals: proposals, }); case types.FETCH_USER_CREATED_REJECTED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingCreated: false, hasFetchedCreated: true, fetchErrorCreated: errorStatus, }); // funded proposals case types.FETCH_USER_FUNDED_PENDING: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingFunded: true, fetchErrorFunded: null, }); case types.FETCH_USER_FUNDED_FULFILLED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingFunded: false, hasFetchedFunded: true, fundedProposals: proposals, }); case types.FETCH_USER_FUNDED_REJECTED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingFunded: false, hasFetchedFunded: true, fetchErrorFunded: errorStatus, }); // comments case types.FETCH_USER_COMMENTS_PENDING: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingComments: true, fetchErrorComments: null, }); case types.FETCH_USER_COMMENTS_FULFILLED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingComments: false, hasFetchedComments: true, comments, }); case types.FETCH_USER_COMMENTS_REJECTED: - return updateStateFetch(state, userFetchId, { + return updateUserState(state, userFetchId, { isFetchingComments: false, hasFetchedComments: true, fetchErrorComments: errorStatus, }); + // invites + case types.FETCH_USER_INVITES_PENDING: + return updateUserState(state, userFetchId, { + isFetchingInvites: true, + fetchErrorInvites: null, + }); + case types.FETCH_USER_INVITES_FULFILLED: + return updateUserState(state, userFetchId, { + isFetchingInvites: false, + hasFetchedInvites: true, + invites, + }); + case types.FETCH_USER_INVITES_REJECTED: + return updateUserState(state, userFetchId, { + isFetchingInvites: false, + hasFetchedInvites: true, + fetchErrorInvites: errorStatus, + }); + // invites + case types.FETCH_USER_INVITES_PENDING: + return updateUserState(state, userFetchId, { + isFetchingInvites: true, + fetchErrorInvites: null, + }); + case types.FETCH_USER_INVITES_FULFILLED: + return updateUserState(state, userFetchId, { + isFetchingInvites: false, + hasFetchedInvites: true, + invites, + }); + case types.FETCH_USER_INVITES_REJECTED: + return updateUserState(state, userFetchId, { + isFetchingInvites: false, + hasFetchedInvites: true, + fetchErrorInvites: errorStatus, + }); + // invite response + case types.RESPOND_TO_INVITE_PENDING: + return updateTeamInvite(state, payload.userId, payload.inviteId, { + isResponding: true, + respondError: null, + }); + case types.RESPOND_TO_INVITE_FULFILLED: + return removeTeamInvite(state, payload.userId, payload.inviteId); + case types.RESPOND_TO_INVITE_REJECTED: + return updateTeamInvite(state, payload.userId, payload.inviteId, { + isResponding: false, + respondError: errorStatus, + }); + // default default: return state; } }; -function updateStateFetch( +function updateUserState( state: UsersState, - id: string, - updates: object, + id: string | number, + updates: Partial, loaded?: UserState, ) { return { @@ -180,3 +244,34 @@ function updateStateFetch( }, }; } + +function updateTeamInvite( + state: UsersState, + userid: string | number, + inviteid: string | number, + updates: Partial, +) { + const userUpdates = { + invites: state.map[userid].invites.map(inv => { + if (inv.id === inviteid) { + return { + ...inv, + ...updates, + }; + } + return inv; + }), + }; + return updateUserState(state, userid, userUpdates); +} + +function removeTeamInvite( + state: UsersState, + userid: string | number, + inviteid: string | number, +) { + const userUpdates = { + invites: state.map[userid].invites.filter(inv => inv.id !== inviteid), + }; + return updateUserState(state, userid, userUpdates); +} diff --git a/frontend/client/modules/users/types.ts b/frontend/client/modules/users/types.ts index 9ed9fc40..eb33a6df 100644 --- a/frontend/client/modules/users/types.ts +++ b/frontend/client/modules/users/types.ts @@ -23,6 +23,16 @@ enum UsersActions { FETCH_USER_COMMENTS_PENDING = 'FETCH_USER_COMMENTS_PENDING', FETCH_USER_COMMENTS_FULFILLED = 'FETCH_USER_COMMENTS_FULFILLED', FETCH_USER_COMMENTS_REJECTED = 'FETCH_USER_COMMENTS_REJECTED', + + FETCH_USER_INVITES = 'FETCH_USER_INVITES', + FETCH_USER_INVITES_PENDING = 'FETCH_USER_INVITES_PENDING', + FETCH_USER_INVITES_FULFILLED = 'FETCH_USER_INVITES_FULFILLED', + FETCH_USER_INVITES_REJECTED = 'FETCH_USER_INVITES_REJECTED', + + RESPOND_TO_INVITE = 'RESPOND_TO_INVITE', + RESPOND_TO_INVITE_PENDING = 'RESPOND_TO_INVITE_PENDING', + RESPOND_TO_INVITE_FULFILLED = 'RESPOND_TO_INVITE_FULFILLED', + RESPOND_TO_INVITE_REJECTED = 'RESPOND_TO_INVITE_REJECTED', } export default UsersActions; From 95a963f2c89b5e362da9faa3d720ade909c512ec Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Fri, 16 Nov 2018 14:17:09 -0500 Subject: [PATCH 22/32] Fix cyclic dependency. --- backend/grant/proposal/models.py | 12 ++---------- frontend/types/proposal.ts | 5 +++++ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/backend/grant/proposal/models.py b/backend/grant/proposal/models.py index 59510f93..5762dddf 100644 --- a/backend/grant/proposal/models.py +++ b/backend/grant/proposal/models.py @@ -3,7 +3,6 @@ from typing import List from sqlalchemy import func from grant.comment.models import Comment -from grant.user.models import User from grant.extensions import ma, db from grant.utils.misc import dt_to_unix from grant.utils.exceptions import ValidationException @@ -51,17 +50,10 @@ class ProposalTeamInvite(db.Model): @staticmethod def get_pending_for_user(user): - print('Hello') - print(str( - ProposalTeamInvite.query.filter( - (func.lower(User.account_address) == func.lower(ProposalTeamInvite.address)) | - (func.lower(User.email_address) == func.lower(ProposalTeamInvite.address)) - ) - )) return ProposalTeamInvite.query.filter( ProposalTeamInvite.accepted == None, - (func.lower(User.account_address) == func.lower(ProposalTeamInvite.address)) | - (func.lower(User.email_address) == func.lower(ProposalTeamInvite.address)) + (func.lower(user.account_address) == func.lower(ProposalTeamInvite.address)) | + (func.lower(user.email_address) == func.lower(ProposalTeamInvite.address)) ).all() diff --git a/frontend/types/proposal.ts b/frontend/types/proposal.ts index 0e0947d0..7d75bdcb 100644 --- a/frontend/types/proposal.ts +++ b/frontend/types/proposal.ts @@ -67,6 +67,7 @@ export interface Proposal { proposalUrlId: string; dateCreated: number; title: string; + brief: string; content: string; stage: string; category: PROPOSAL_CATEGORY; @@ -79,6 +80,10 @@ export interface ProposalWithCrowdFund extends Proposal { crowdFundContract: any; } +export interface TeamInviteWithProposal extends TeamInvite { + proposal: Proposal; +} + export interface ProposalComments { proposalId: ProposalWithCrowdFund['proposalId']; totalComments: number; From c1d7b88924a8878040a7e9fda4dd2e6d09c75b72 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Fri, 16 Nov 2018 14:18:27 -0500 Subject: [PATCH 23/32] Dont show accepted invites. --- frontend/client/components/CreateFlow/Team.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/client/components/CreateFlow/Team.tsx b/frontend/client/components/CreateFlow/Team.tsx index 7690fcb1..f09e48ad 100644 --- a/frontend/client/components/CreateFlow/Team.tsx +++ b/frontend/client/components/CreateFlow/Team.tsx @@ -73,16 +73,17 @@ class CreateFlowTeam extends React.Component { ? 'That doesn’t look like an email address or ETH address' : undefined; const inviteDisabled = !!inviteError || !address; + const pendingInvites = invites.filter(inv => inv.accepted === null); return (
{team.map((user, idx) => ( ))} - {!!invites.length && ( + {!!pendingInvites.length && (

Pending invitations

- {invites.map(inv => ( + {pendingInvites.map(inv => (
{inv.address}
Date: Fri, 16 Nov 2018 14:19:13 -0500 Subject: [PATCH 24/32] Fix pending in review. --- frontend/client/components/CreateFlow/Review.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/client/components/CreateFlow/Review.tsx b/frontend/client/components/CreateFlow/Review.tsx index 0adf802c..fab1ccd2 100644 --- a/frontend/client/components/CreateFlow/Review.tsx +++ b/frontend/client/components/CreateFlow/Review.tsx @@ -223,7 +223,7 @@ const ReviewTeam: React.SFC<{
))} - {!!invites.length && ( + {!!invites.filter(inv => inv.accepted === null).length && (
+ {invites.length} invite(s) pending
)}
From 89c1c3345d65c238c169557b2a99997a2600e13d Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Fri, 16 Nov 2018 14:23:42 -0500 Subject: [PATCH 25/32] Fix some zeroes, default fields. --- .../client/components/CreateFlow/PubishWarningModal.tsx | 2 +- frontend/client/components/Profile/ProfileInvite.tsx | 8 ++++++-- frontend/client/modules/create/utils.ts | 4 +++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/frontend/client/components/CreateFlow/PubishWarningModal.tsx b/frontend/client/components/CreateFlow/PubishWarningModal.tsx index f4df5669..029b455a 100644 --- a/frontend/client/components/CreateFlow/PubishWarningModal.tsx +++ b/frontend/client/components/CreateFlow/PubishWarningModal.tsx @@ -26,7 +26,7 @@ export default class PublishWarningModal extends React.Component { onCancel={handleClose} >
- {warnings.length && ( + {!!warnings.length && ( { return (
-
{proposal.title}
-
{proposal.brief}
+
+ {proposal.title || No title} +
+
+ {proposal.brief || No description} +
created by {inviter.name}
diff --git a/frontend/client/modules/create/utils.ts b/frontend/client/modules/create/utils.ts index ed8d37d1..c455b09d 100644 --- a/frontend/client/modules/create/utils.ts +++ b/frontend/client/modules/create/utils.ts @@ -188,7 +188,9 @@ export function getCreateWarnings(form: Partial): string[] { const warnings = []; // Warn about pending invites - if (form.invites!.length) { + const hasPending = + (form.invites || []).filter(inv => inv.accepted === null).length !== 0; + if (hasPending) { warnings.push(` You still have pending team invitations. If you publish before they are accepted, your team will be locked in and they won’t be able to From d7e4c1c533e7292c1b5ac74221c81c371b77c155 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Fri, 16 Nov 2018 18:05:17 -0500 Subject: [PATCH 26/32] Check in user refactor. Incomplete, but computer is crashing routinely. --- backend/grant/user/models.py | 17 +- backend/grant/user/views.py | 28 +- backend/grant/utils/social.py | 19 + contract/build/contracts/CrowdFund.json | 6674 ++++++++--------- .../build/contracts/CrowdFundFactory.json | 406 +- frontend/client/api/api.ts | 50 +- .../client/components/AuthFlow/SignIn.tsx | 15 +- .../client/components/CreateFlow/Review.tsx | 2 +- .../client/components/CreateFlow/Team.tsx | 29 +- .../components/CreateFlow/TeamMember.tsx | 13 +- .../client/components/Profile/ProfileEdit.tsx | 92 +- .../components/Profile/ProfileInvite.tsx | 6 +- .../components/Profile/ProfileProposal.tsx | 2 +- .../client/components/Profile/ProfileUser.tsx | 39 +- frontend/client/components/Profile/index.tsx | 23 +- .../components/Proposal/TeamBlock/index.tsx | 2 +- .../Proposals/ProposalCard/index.tsx | 3 +- frontend/client/components/UserAvatar.tsx | 12 +- frontend/client/components/UserRow/index.tsx | 8 +- frontend/client/modules/auth/reducers.ts | 10 +- frontend/client/modules/create/utils.ts | 11 +- frontend/client/modules/users/actions.ts | 4 +- frontend/client/modules/users/reducers.ts | 21 +- frontend/client/pages/settings.tsx | 2 +- frontend/client/utils/api.ts | 30 +- frontend/client/utils/social.tsx | 48 +- frontend/stories/UserRow.story.tsx | 31 +- frontend/stories/props.tsx | 28 +- frontend/types/proposal.ts | 8 +- frontend/types/social.ts | 11 +- frontend/types/user.ts | 22 +- 31 files changed, 3790 insertions(+), 3876 deletions(-) create mode 100644 backend/grant/utils/social.py diff --git a/backend/grant/user/models.py b/backend/grant/user/models.py index 59c4bea3..961158d0 100644 --- a/backend/grant/user/models.py +++ b/backend/grant/user/models.py @@ -3,6 +3,7 @@ from grant.comment.models import Comment from grant.email.models import EmailVerification from grant.extensions import ma, db from grant.utils.misc import make_url +from grant.utils.social import get_social_info_from_url from grant.email.send import send_email @@ -122,7 +123,21 @@ class SocialMediaSchema(ma.Schema): class Meta: model = SocialMedia # Fields to expose - fields = ("social_media_link",) + fields = ( + "service", + "username", + ) + + service = ma.Method("get_service") + username = ma.Method("get_username") + + def get_service(self, obj): + info = get_social_info_from_url(obj.social_media_link) + return info['service'] + + def get_username(self, obj): + info = get_social_info_from_url(obj.social_media_link) + return info['username'] social_media_schema = SocialMediaSchema() diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index f74a8e0f..76e9ac3d 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -39,9 +39,13 @@ def get_me(): @blueprint.route("/", methods=["GET"]) @endpoint.api() def get_user(user_identity): + print('get by ident') user = User.get_by_identifier(email_address=user_identity, account_address=user_identity) + print(user) if user: + print('dumping') result = user_schema.dump(user) + print(result) return result else: message = "User with account_address or user_identity matching {} not found".format(user_identity) @@ -126,7 +130,7 @@ def auth_user(account_address, signed_message, raw_typed_data): parameter('displayName', type=str, required=True), parameter('title', type=str, required=True), parameter('socialMedias', type=list, required=True), - parameter('avatar', type=dict, required=True) + parameter('avatar', type=str, required=True) ) def update_user(user_identity, display_name, title, social_medias, avatar): user = g.current_user @@ -137,22 +141,20 @@ def update_user(user_identity, display_name, title, social_medias, avatar): if title is not None: user.title = title + db_socials = SocialMedia.query.filter_by(user_id=user.id).all() + for db_social in db_socials: + db.session.delete(db_social) if social_medias is not None: - SocialMedia.query.filter_by(user_id=user.id).delete() for social_media in social_medias: - sm = SocialMedia(social_media_link=social_media.get("link"), user_id=user.id) + sm = SocialMedia(social_media_link=social_media, user_id=user.id) db.session.add(sm) - else: - SocialMedia.query.filter_by(user_id=user.id).delete() - if avatar is not None: - Avatar.query.filter_by(user_id=user.id).delete() - avatar_link = avatar.get('link') - if avatar_link: - avatar_obj = Avatar(image_url=avatar_link, user_id=user.id) - db.session.add(avatar_obj) - else: - Avatar.query.filter_by(user_id=user.id).delete() + db_avatar = Avatar.query.filter_by(user_id=user.id).first() + if db_avatar: + db.session.delete(db_avatar) + if avatar: + new_avatar = Avatar(image_url=avatar, user_id=user.id) + db.session.add(new_avatar) db.session.commit() result = user_schema.dump(user) diff --git a/backend/grant/utils/social.py b/backend/grant/utils/social.py new file mode 100644 index 00000000..ab05ceb3 --- /dev/null +++ b/backend/grant/utils/social.py @@ -0,0 +1,19 @@ +import re + +username_regex = '([a-zA-Z0-9-_]*)' + +social_patterns = { + 'GITHUB': 'https://github.com/{}'.format(username_regex), + 'TWITTER': 'https://twitter.com/{}'.format(username_regex), + 'LINKEDIN': 'https://linkedin.com/in/{}'.format(username_regex), + 'KEYBASE': 'https://keybase.io/{}'.format(username_regex), +} + +def get_social_info_from_url(url: str): + for service, pattern in social_patterns.items(): + match = re.match(pattern, url) + if match: + return { + 'service': service, + 'username': match.group(1), + } diff --git a/contract/build/contracts/CrowdFund.json b/contract/build/contracts/CrowdFund.json index 86613203..023b2d15 100644 --- a/contract/build/contracts/CrowdFund.json +++ b/contract/build/contracts/CrowdFund.json @@ -525,20 +525,20 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620032ee380380620032ee833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ae5179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c51806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029", - "deployedBytecode": "0x608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029", - "sourceMap": "87:12715:0:-;;;1437:1931;8:9:-1;5:2;;;30:1;27;20:12;5:2;1437:1931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2194:19;2232:6;2287:20;1711:7;1697:10;:21;;1689:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1;1775:9;:16;:21;;:47;;;;;1820:2;1800:9;:16;:22;;1775:47;1767:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1924:1;1902:11;:18;:23;;:51;;;;;1951:2;1929:11;:18;:24;;1902:51;1894:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:1;2194:23;;2241:1;2232:10;;2227:477;2248:11;:18;2244:1;:22;2227:477;;;2310:11;2322:1;2310:14;;;;;;;;;;;;;;;;;;2287:37;;2364:1;2346:15;:19;2338:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2440:35;2459:15;2440:14;:18;;;;;;:35;;;;;:::i;:::-;2423:52;;2489:10;2505:187;;;;;;;;;2541:15;2505:187;;;;2647:1;2505:187;;;;2601:1;2505:187;;;;2672:5;2505:187;;;;;2489:204;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2489:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:3;;;;;;;2227:477;;;2739:10;2721:14;:28;2713:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:1;2878:25;:29;;;;2929:10;2917:9;:22;;;;2963:12;2949:11;;:26;;;;;;;;;;;;;;;;;;2996:9;2985:8;:20;;;;;;;;;;;;:::i;:::-;;3032:9;3026:3;:15;3015:8;:26;;;;3075:22;3051:21;:46;;;;3139:30;3107:29;;:62;;;;;;;;;;;;;;;;;;3200:5;3179:18;;:26;;;;;;;;;;;;;;;;;;3239:1;3215:21;:25;;;;3259:5;3250:6;;:14;;;;;;;;;;;;;;;;;;3360:1;3345:12;:16;;;;1437:1931;;;;;;;;;;87:12715;;1238:128:2;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;87:12715:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "deployedSourceMap": "87:12715:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;776:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1079:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:33:0;;;;;;;;;;;;;;;;;;;;;;;1150:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1150:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11263:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11263:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1005:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1005:25:0;;;;;;;;;;;;;;;;;;;;;;;922:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;922:20:0;;;;;;;;;;;;;;;;;;;;;;;6712:1039;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6712:1039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:37:0;;;;;;;;;;;;;;;;;;;;;;;1118:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1118:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11129:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11129:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10068:587;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10068:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9299:693;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9299:693:0;;;;;;8724:569;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8724:569:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1302:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11827:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11827:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;975:24:0;;;;;;;;;;;;;;;;;;;;;;;10752:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10752:371:0;;;;;;11618:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11618:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5068:1638;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5068:1638:0;;;;;;;;;;;;;;;;;;;;;;;;;;883:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;883:33:0;;;;;;;;;;;;;;;;;;;;;;;7757:961;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7757:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;1207:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1207:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;948:21:0;;;;;;;;;;;;;;;;;;;;;;;12005:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12005:96:0;;;;;;;;;;;;;;;;;;;;;;;3374:1688;;;;;;800:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;800:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;836:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1401:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1401:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11503:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11503:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;;;;;;;;;;;;:::o;1079:33::-;;;;:::o;1150:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11263:234::-;11311:4;11332:6;11341:1;11332:10;;11327:142;11348:8;:15;;;;11344:1;:19;11327:142;;;11402:8;11411:1;11402:11;;;;;;;;;;;;;;;;;;;;;;;;;;;11388:25;;:10;:25;;;11384:75;;;11440:4;11433:11;;;;11384:75;11365:3;;;;;;;11327:142;;;11485:5;11478:12;;11263:234;;;:::o;1005:25::-;;;;:::o;922:20::-;;;;:::o;6712:1039::-;6821:28;7017:27;7104:23;7190:16;12638:1;12591:12;:24;12604:10;12591:24;;;;;;;;;;;;;;;:43;;;:48;;12583:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6852:12;:24;6865:10;6852:24;;;;;;;;;;;;;;;:41;;6894:5;6852:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6821:79;;6945:4;6918:31;;:23;:31;;;;6910:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7093:1;7047:10;7058:5;7047:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;7017:77;;7177:3;7130:10;7141:5;7130:17;;;;;;;;;;;;;;;;;;;;:43;;;:50;;7104:76;;7209:22;:45;;;;;7236:18;7235:19;7209:45;7190:64;;7272:11;7264:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7378:4;7327:12;:24;7340:10;7327:24;;;;;;;;;;;;;;;:41;;7369:5;7327:48;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;7397:4;7396:5;7392:353;;;7463:92;7511:12;:24;7524:10;7511:24;;;;;;;;;;;;;;;:43;;;7463:10;7474:5;7463:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7417:10;7428:5;7417:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7392:353;;;7576:4;7572:173;;;7642:92;7690:12;:24;7703:10;7690:24;;;;;;;;;;;;;;;:43;;;7642:10;7653:5;7642:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7596:10;7607:5;7596:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7572:173;7392:353;6712:1039;;;;;;:::o;1036:37::-;;;;:::o;1118:26::-;;;;;;;;;;;;;:::o;11129:128::-;11194:4;11238:12;;11217:18;11233:1;11217:11;:15;;:18;;;;:::i;:::-;:33;11210:40;;11129:128;;;:::o;10068:587::-;10189:15;10377:23;10459:19;12147:6;;;;;;;;;;;12139:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10145:6;;;;;;;;;;;10137:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10207:12;:27;10220:13;10207:27;;;;;;;;;;;;;;;:36;;;;;;;;;;;;10189:54;;10262:10;10261:11;10253:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10363:4;10324:12;:27;10337:13;10324:27;;;;;;;;;;;;;;;:36;;;:43;;;;;;;;;;;;;;;;;;10403:12;:27;10416:13;10403:27;;;;;;;;;;;;;;;:46;;;10377:72;;10481:64;10531:13;;10481:45;10512:4;10504:21;;;10481:18;:22;;:45;;;;:::i;:::-;:49;;:64;;;;:::i;:::-;10459:86;;10555:13;:22;;:38;10578:14;10555:38;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10555:38:0;10618:13;10608:40;;;10633:14;10608:40;;;;;;;;;;;;;;;;;;10068:587;;;;:::o;9299:693::-;9347:20;9397;9440:27;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9370:17;:15;:17::i;:::-;9347:40;;9420:10;:8;:10::i;:::-;9397:33;;9470:39;9487:21;;9470:16;:39::i;:::-;9440:69;;9527:15;:34;;;;9546:15;9527:34;:60;;;;9565:22;9527:60;9519:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9648:15;9644:272;;;9694:30;9679:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9644:272;;;9745:15;9741:175;;;9791:30;9776:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9741:175;;;9867:38;9852:12;;:53;;;;;;;;;;;;;;;;;;;;;;;;9741:175;9644:272;9934:4;9925:6;;:13;;;;;;;;;;;;;;;;;;9972:4;9964:21;;;9948:13;:37;;;;9299:693;;;:::o;8724:569::-;8812:15;12638:1;12591:12;:24;12604:10;12591:24;;;;;;;;;;;;;;;:43;;;:48;;12583:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8830:12;:24;8843:10;8830:24;;;;;;;;;;;;;;;:35;;;;;;;;;;;;8812:53;;8891:10;8883:18;;:4;:18;;;;8875:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9000:4;8962:12;:24;8975:10;8962:24;;;;;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;9019:4;9018:5;9014:273;;;9063:70;9089:12;:24;9102:10;9089:24;;;;;;;;;;;;;;;:43;;;9063:21;;:25;;:70;;;;:::i;:::-;9039:21;:94;;;;9014:273;;;9162:4;9158:129;;;9206:70;9232:12;:24;9245:10;9232:24;;;;;;;;;;;;;;;:43;;;9206:21;;:25;;:70;;;;:::i;:::-;9182:21;:94;;;;9158:129;9014:273;8724:569;;:::o;1302:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11827:172::-;11918:4;11941:12;:32;11954:18;11941:32;;;;;;;;;;;;;;;:51;;;11934:58;;11827:172;;;:::o;975:24::-;;;;:::o;10752:371::-;10816:6;10875:26;12736:17;:15;:17::i;:::-;12728:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12147:6;;;;;;;;;;;12139:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10825:1;10816:10;;10811:271;10832:15;:22;;;;10828:1;:26;10811:271;;;10904:15;10920:1;10904:18;;;;;;;;;;;;;;;;;;;;;;;;;;;10875:47;;10941:12;:32;10954:18;10941:32;;;;;;;;;;;;;;;:41;;;;;;;;;;;;10940:42;10936:136;;;11002:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10936:136;10856:3;;;;;;;10811:271;;;11104:11;;;;;;;;;;;11091:25;;;11618:203;11725:4;11749:12;:32;11762:18;11749:32;;;;;;;;;;;;;;;:49;;11799:14;11749:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11742:72;;11618:203;;;;:::o;5068:1638::-;5166:25;5226:26;5314;5527:19;5566:6;12736:17;:15;:17::i;:::-;12728:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:10;5205:5;5194:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;5166:50;;5301:3;5255:10;5266:5;5255:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;5226:78;;5343:61;5360:10;5371:5;5360:17;;;;;;;;;;;;;;;;;;;;:43;;;5343:16;:61::i;:::-;5314:90;;5469:20;5468:21;5460:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5549:2;5527:24;;5575:1;5566:10;;5561:150;5582:10;:17;;;;5578:1;:21;5561:150;;;5624:10;5635:1;5624:13;;;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;5620:81;;;5684:1;5662:24;;5620:81;5601:3;;;;;;;5561:150;;;5761:1;5743:15;:19;5729:5;:34;5721:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5959:1;5912:10;5923:5;5912:17;;;;;;;;;;;;;;;;;;;;:43;;;:48;5908:792;;;5989:1;5980:5;:10;:43;;;;;5994:29;;;;;;;;;;;5980:43;5976:395;;;6240:1;6194:10;6205:5;6194:17;;;;;;;;;;;;;;;;;;;;:43;;:47;;;;5976:395;;;6326:30;6334:21;;6326:3;:7;;:30;;;;:::i;:::-;6280:10;6291:5;6280:17;;;;;;;;;;;;;;;;;;;;:43;;:76;;;;5976:395;5908:792;;;6544:21;:46;;;;;6569:21;6544:46;6540:160;;;6652:37;6660:28;6686:1;6660:21;;:25;;:28;;;;:::i;:::-;6652:3;:7;;:37;;;;:::i;:::-;6606:10;6617:5;6606:17;;;;;;;;;;;;;;;;;;;;:43;;:83;;;;6540:160;5908:792;5068:1638;;;;;;:::o;883:33::-;;;;:::o;7757:961::-;7838:26;7926:20;8020:25;8209:11;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7913:3;7867:10;7878:5;7867:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;7838:78;;7949:61;7966:10;7977:5;7966:17;;;;;;;;;;;;;;;;;;;;:43;;;7949:16;:61::i;:::-;7926:84;;8048:10;8059:5;8048:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;8020:50;;8084:21;:41;;;;;8110:15;8109:16;8084:41;:66;;;;;8130:20;8129:21;8084:66;8080:632;;;8191:4;8166:10;8177:5;8166:17;;;;;;;;;;;;;;;;;;;;:22;;;:29;;;;;;;;;;;;;;;;;;8223:10;8234:5;8223:17;;;;;;;;;;;;;;;;;;;;:24;;;8209:38;;8261:11;;;;;;;;;;;:20;;:28;8282:6;8261:28;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8261:28:0;8318:11;;;;;;;;;;;8308:30;;;8331:6;8308:30;;;;;;;;;;;;;;;;;;8440:1;8408:28;8430:5;8408:10;:17;;;;:21;;:28;;;;:::i;:::-;:33;8404:219;;;8596:11;;;;;;;;;;;8583:25;;;8404:219;8080:632;;;8653:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8080:632;7757:961;;;;;:::o;1207:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;948:21::-;;;;:::o;12005:96::-;12053:4;12081:12;;;;;;;;;;;12076:18;;;;;;;;12069:25;;12005:96;:::o;3374:1688::-;3481:20;4050:23;4124:21;12462:8;;12455:3;:15;;:38;;;;;12475:18;;;;;;;;;;;12474:19;12455:38;12447:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:27;3521:9;3504:12;;:16;;:27;;;;:::i;:::-;3481:50;;3568:9;;3549:15;:28;;3541:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4089:25;;4076:9;:38;;4050:64;;4167:9;;4148:15;:28;4124:52;;4194:18;:38;;;;4216:16;4194:38;4186:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:1;4380:12;:24;4393:10;4380:24;;;;;;;;;;;;;;;:43;;;:48;4376:502;;;4471:207;;;;;;;;;4521:9;4471:207;;;;4577:10;:17;;;;4566:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;4566:29:0;;;;4471:207;;;;4625:5;4471:207;;;;;;4658:5;4471:207;;;;;4444:12;:24;4457:10;4444:24;;;;;;;;;;;;;;;:234;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4692:15;4713:10;4692:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4692:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:502;;;4809:58;4857:9;4809:12;:24;4822:10;4809:24;;;;;;;;;;;;;;;:43;;;:47;;:58;;;;:::i;:::-;4763:12;:24;4776:10;4763:24;;;;;;;;;;;;;;;:43;;:104;;;;4376:502;4903:15;4888:12;:30;;;;4948:9;;4932:12;;:25;4928:81;;;4994:4;4973:18;;:25;;;;;;;;;;;;;;;;;;4928:81;5033:10;5023:32;;;5045:9;5023:32;;;;;;;;;;;;;;;;;;3374:1688;;;:::o;800:30::-;;;;;;;;;;;;;:::o;836:41::-;;;;;;;;;;;;;:::o;1401:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11503:109::-;11544:4;11574:8;;11567:3;:15;;:38;;;;;11587:18;;;;;;;;;;;11586:19;11567:38;11560:45;;11503:109;:::o;1060:116:2:-;1120:7;1148:2;1142;:8;;1135:16;;;;;;1169:2;1164;:7;1157:14;;1060:116;;;;:::o;1238:128::-;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;203:380::-;263:9;495:1;489:2;:7;485:36;;;513:1;506:8;;;;485:36;536:2;531;:7;527:11;;561:2;555;551:1;:6;;;;;;;;:12;544:20;;;;;;577:1;570:8;;203:380;;;;;:::o;665:283::-;725:7;941:2;936;:7;;;;;;;;929:14;;665:283;;;;:::o;87:12715:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", - "source": "pragma solidity ^0.4.24;\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n\ncontract CrowdFund {\n using SafeMath for uint256;\n\n enum FreezeReason {\n CALLER_IS_TRUSTEE,\n CROWD_FUND_FAILED,\n MAJORITY_VOTING_TO_REFUND\n }\n\n FreezeReason freezeReason;\n\n struct Milestone {\n uint amount;\n uint amountVotingAgainstPayout;\n uint payoutRequestVoteDeadline;\n bool paid;\n }\n\n struct Contributor {\n uint contributionAmount;\n // array index bool reflect milestone index vote\n bool[] milestoneNoVotes;\n bool refundVote;\n bool refunded;\n }\n\n event Deposited(address indexed payee, uint256 weiAmount);\n event Withdrawn(address indexed payee, uint256 weiAmount);\n\n bool public frozen;\n bool public isRaiseGoalReached;\n bool public immediateFirstMilestonePayout;\n uint public milestoneVotingPeriod;\n uint public deadline;\n uint public raiseGoal;\n uint public amountRaised;\n uint public frozenBalance;\n uint public minimumContributionAmount;\n uint public amountVotingForRefund;\n address public beneficiary;\n mapping(address => Contributor) public contributors;\n address[] public contributorList;\n // authorized addresses to ask for milestone payouts\n address[] public trustees;\n // constructor ensures that all values combined equal raiseGoal\n Milestone[] public milestones;\n\n constructor(\n uint _raiseGoal,\n address _beneficiary,\n address[] _trustees,\n uint[] _milestones,\n uint _deadline,\n uint _milestoneVotingPeriod,\n bool _immediateFirstMilestonePayout)\n public {\n require(_raiseGoal >= 1 ether, \"Raise goal is smaller than 1 ether\");\n require(_trustees.length >= 1 && _trustees.length <= 10, \"Trustee addresses must be at least 1 and not more than 10\");\n require(_milestones.length >= 1 && _milestones.length <= 10, \"Milestones must be at least 1 and not more than 10\");\n // TODO - require minimum duration\n // TODO - require minimum milestone voting period\n\n // ensure that cumalative milestone payouts equal raiseGoalAmount\n uint milestoneTotal = 0;\n for (uint i = 0; i < _milestones.length; i++) {\n uint milestoneAmount = _milestones[i];\n require(milestoneAmount > 0, \"Milestone amount must be greater than 0\");\n milestoneTotal = milestoneTotal.add(milestoneAmount);\n milestones.push(Milestone({\n amount: milestoneAmount,\n payoutRequestVoteDeadline: 0,\n amountVotingAgainstPayout: 0,\n paid: false\n }));\n }\n require(milestoneTotal == _raiseGoal, \"Milestone total must equal raise goal\");\n // TODO - increase minimum contribution amount is 0.1% of raise goal\n minimumContributionAmount = 1;\n raiseGoal = _raiseGoal;\n beneficiary = _beneficiary;\n trustees = _trustees;\n deadline = now + _deadline;\n milestoneVotingPeriod = _milestoneVotingPeriod;\n immediateFirstMilestonePayout = _immediateFirstMilestonePayout;\n isRaiseGoalReached = false;\n amountVotingForRefund = 0;\n frozen = false;\n // assumes no ether contributed as part of contract deployment\n amountRaised = 0;\n }\n\n function contribute() public payable onlyOnGoing onlyUnfrozen {\n // don't allow overfunding\n uint newAmountRaised = amountRaised.add(msg.value);\n require(newAmountRaised <= raiseGoal, \"Contribution exceeds the raise goal.\");\n // require minimumContributionAmount (set during construction)\n // there may be a special case where just enough has been raised so that the remaining raise amount is just smaller than the minimumContributionAmount\n // in this case, allow that the msg.value + amountRaised will equal the raiseGoal.\n // This makes sure that we don't enter a scenario where a proposal can never be fully funded\n bool greaterThanMinimum = msg.value >= minimumContributionAmount;\n bool exactlyRaiseGoal = newAmountRaised == raiseGoal;\n require(greaterThanMinimum || exactlyRaiseGoal, \"msg.value greater than minimum, or msg.value == remaining amount to be raised\");\n // in cases where an address pays > 1 times\n if (contributors[msg.sender].contributionAmount == 0) {\n contributors[msg.sender] = Contributor({\n contributionAmount: msg.value,\n milestoneNoVotes: new bool[](milestones.length),\n refundVote: false,\n refunded: false\n });\n contributorList.push(msg.sender);\n }\n else {\n contributors[msg.sender].contributionAmount = contributors[msg.sender].contributionAmount.add(msg.value);\n }\n\n amountRaised = newAmountRaised;\n if (amountRaised == raiseGoal) {\n isRaiseGoalReached = true;\n }\n emit Deposited(msg.sender, msg.value);\n }\n\n function requestMilestonePayout (uint index) public onlyTrustee onlyRaised onlyUnfrozen {\n bool milestoneAlreadyPaid = milestones[index].paid;\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline > now;\n bool majorityAgainstPayout = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n // prevent requesting paid milestones\n require(!milestoneAlreadyPaid, \"Milestone already paid\");\n\n int lowestIndexPaid = -1;\n for (uint i = 0; i < milestones.length; i++) {\n if (milestones[i].paid) {\n lowestIndexPaid = int(i);\n }\n }\n\n require(index == uint(lowestIndexPaid + 1), \"Milestone request must be for first unpaid milestone\");\n // begin grace period for contributors to vote no on milestone payout\n if (milestones[index].payoutRequestVoteDeadline == 0) {\n if (index == 0 && immediateFirstMilestonePayout) {\n // make milestone payouts immediately avtheailable for the first milestone if immediateFirstMilestonePayout is set during consutrction\n milestones[index].payoutRequestVoteDeadline = 1;\n } else {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod);\n }\n }\n // if the payoutRequestVoteDealine has passed and majority voted against it previously, begin the grace period with 2 times the deadline\n else if (voteDeadlineHasPassed && majorityAgainstPayout) {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod.mul(2));\n }\n }\n\n function voteMilestonePayout(uint index, bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool existingMilestoneNoVote = contributors[msg.sender].milestoneNoVotes[index];\n require(existingMilestoneNoVote != vote, \"Vote value must be different than existing vote state\");\n bool milestoneVotingStarted = milestones[index].payoutRequestVoteDeadline > 0;\n bool votePeriodHasEnded = milestones[index].payoutRequestVoteDeadline <= now;\n bool onGoingVote = milestoneVotingStarted && !votePeriodHasEnded;\n require(onGoingVote, \"Milestone voting must be open\");\n contributors[msg.sender].milestoneNoVotes[index] = vote;\n if (!vote) {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.sub(contributors[msg.sender].contributionAmount);\n } else if (vote) {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function payMilestonePayout(uint index) public onlyRaised onlyUnfrozen {\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline < now;\n bool majorityVotedNo = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n bool milestoneAlreadyPaid = milestones[index].paid;\n if (voteDeadlineHasPassed && !majorityVotedNo && !milestoneAlreadyPaid) {\n milestones[index].paid = true;\n uint amount = milestones[index].amount;\n beneficiary.transfer(amount);\n emit Withdrawn(beneficiary, amount);\n // if the final milestone just got paid\n if (milestones.length.sub(index) == 1) {\n // useful to selfdestruct in case funds were forcefully deposited into contract. otherwise they are lost.\n selfdestruct(beneficiary);\n }\n } else {\n revert(\"required conditions were not satisfied\");\n }\n }\n\n function voteRefund(bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool refundVote = contributors[msg.sender].refundVote;\n require(vote != refundVote, \"Existing vote state is identical to vote value\");\n contributors[msg.sender].refundVote = vote;\n if (!vote) {\n amountVotingForRefund = amountVotingForRefund.sub(contributors[msg.sender].contributionAmount);\n }\n else if (vote) {\n amountVotingForRefund = amountVotingForRefund.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function refund() public onlyUnfrozen {\n bool callerIsTrustee = isCallerTrustee();\n bool crowdFundFailed = isFailed();\n bool majorityVotingToRefund = isMajorityVoting(amountVotingForRefund);\n require(callerIsTrustee || crowdFundFailed || majorityVotingToRefund, \"Required conditions for refund are not met\");\n if (callerIsTrustee) {\n freezeReason = FreezeReason.CALLER_IS_TRUSTEE;\n } else if (crowdFundFailed) {\n freezeReason = FreezeReason.CROWD_FUND_FAILED;\n } else {\n freezeReason = FreezeReason.MAJORITY_VOTING_TO_REFUND;\n }\n frozen = true;\n frozenBalance = address(this).balance;\n }\n\n // anyone can refund a contributor if a crowdfund has been frozen\n function withdraw(address refundAddress) public onlyFrozen {\n require(frozen, \"CrowdFund is not frozen\");\n bool isRefunded = contributors[refundAddress].refunded;\n require(!isRefunded, \"Specified address is already refunded\");\n contributors[refundAddress].refunded = true;\n uint contributionAmount = contributors[refundAddress].contributionAmount;\n uint amountToRefund = contributionAmount.mul(address(this).balance).div(frozenBalance);\n refundAddress.transfer(amountToRefund);\n emit Withdrawn(refundAddress, amountToRefund);\n }\n\n // it may be useful to selfdestruct in case funds were force deposited to the contract\n function destroy() public onlyTrustee onlyFrozen {\n for (uint i = 0; i < contributorList.length; i++) {\n address contributorAddress = contributorList[i];\n if (!contributors[contributorAddress].refunded) {\n revert(\"At least one contributor has not yet refunded\");\n }\n }\n selfdestruct(beneficiary);\n }\n\n function isMajorityVoting(uint valueVoting) public view returns (bool) {\n return valueVoting.mul(2) > amountRaised;\n }\n\n function isCallerTrustee() public view returns (bool) {\n for (uint i = 0; i < trustees.length; i++) {\n if (msg.sender == trustees[i]) {\n return true;\n }\n }\n return false;\n }\n\n function isFailed() public view returns (bool) {\n return now >= deadline && !isRaiseGoalReached;\n }\n\n function getContributorMilestoneVote(address contributorAddress, uint milestoneIndex) public view returns (bool) { \n return contributors[contributorAddress].milestoneNoVotes[milestoneIndex];\n }\n\n function getContributorContributionAmount(address contributorAddress) public view returns (uint) {\n return contributors[contributorAddress].contributionAmount;\n }\n\n function getFreezeReason() public view returns (uint) {\n return uint(freezeReason);\n }\n\n modifier onlyFrozen() {\n require(frozen, \"CrowdFund is not frozen\");\n _;\n }\n\n modifier onlyUnfrozen() {\n require(!frozen, \"CrowdFund is frozen\");\n _;\n }\n\n modifier onlyRaised() {\n require(isRaiseGoalReached, \"Raise goal is not reached\");\n _;\n }\n\n modifier onlyOnGoing() {\n require(now <= deadline && !isRaiseGoalReached, \"CrowdFund is not ongoing\");\n _;\n }\n\n modifier onlyContributor() {\n require(contributors[msg.sender].contributionAmount != 0, \"Caller is not a contributor\");\n _;\n }\n\n modifier onlyTrustee() {\n require(isCallerTrustee(), \"Caller is not a trustee\");\n _;\n }\n\n}", - "sourcePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620032e0380380620032e0833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ad7179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c43806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029", + "deployedBytecode": "0x608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029", + "sourceMap": "87:12687:0:-;;;1437:1931;8:9:-1;5:2;;;30:1;27;20:12;5:2;1437:1931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2194:19;2232:6;2287:20;1711:7;1697:10;:21;;1689:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1;1775:9;:16;:21;;:47;;;;;1820:2;1800:9;:16;:22;;1775:47;1767:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1924:1;1902:11;:18;:23;;:51;;;;;1951:2;1929:11;:18;:24;;1902:51;1894:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:1;2194:23;;2241:1;2232:10;;2227:477;2248:11;:18;2244:1;:22;2227:477;;;2310:11;2322:1;2310:14;;;;;;;;;;;;;;;;;;2287:37;;2364:1;2346:15;:19;2338:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2440:35;2459:15;2440:14;:18;;;;;;:35;;;;;:::i;:::-;2423:52;;2489:10;2505:187;;;;;;;;;2541:15;2505:187;;;;2647:1;2505:187;;;;2601:1;2505:187;;;;2672:5;2505:187;;;;;2489:204;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2489:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:3;;;;;;;2227:477;;;2739:10;2721:14;:28;2713:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:1;2878:25;:29;;;;2929:10;2917:9;:22;;;;2963:12;2949:11;;:26;;;;;;;;;;;;;;;;;;2996:9;2985:8;:20;;;;;;;;;;;;:::i;:::-;;3032:9;3026:3;:15;3015:8;:26;;;;3075:22;3051:21;:46;;;;3139:30;3107:29;;:62;;;;;;;;;;;;;;;;;;3200:5;3179:18;;:26;;;;;;;;;;;;;;;;;;3239:1;3215:21;:25;;;;3259:5;3250:6;;:14;;;;;;;;;;;;;;;;;;3360:1;3345:12;:16;;;;1437:1931;;;;;;;;;;87:12687;;1238:128:2;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;87:12687:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", + "deployedSourceMap": "87:12687:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;776:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1079:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:33:0;;;;;;;;;;;;;;;;;;;;;;;1150:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1150:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11235:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11235:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1005:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1005:25:0;;;;;;;;;;;;;;;;;;;;;;;922:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;922:20:0;;;;;;;;;;;;;;;;;;;;;;;6712:1029;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6712:1029:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:37:0;;;;;;;;;;;;;;;;;;;;;;;1118:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1118:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11101:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11101:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10040:587;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10040:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9271:693;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9271:693:0;;;;;;8714:551;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8714:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1302:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11799:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11799:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;975:24:0;;;;;;;;;;;;;;;;;;;;;;;10724:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10724:371:0;;;;;;11590:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11590:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5068:1638;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5068:1638:0;;;;;;;;;;;;;;;;;;;;;;;;;;883:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;883:33:0;;;;;;;;;;;;;;;;;;;;;;;7747:961;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7747:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;1207:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1207:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;948:21:0;;;;;;;;;;;;;;;;;;;;;;;11977:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11977:96:0;;;;;;;;;;;;;;;;;;;;;;;3374:1688;;;;;;800:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;800:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;836:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1401:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1401:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11475:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11475:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;;;;;;;;;;;;:::o;1079:33::-;;;;:::o;1150:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11235:234::-;11283:4;11304:6;11313:1;11304:10;;11299:142;11320:8;:15;;;;11316:1;:19;11299:142;;;11374:8;11383:1;11374:11;;;;;;;;;;;;;;;;;;;;;;;;;;;11360:25;;:10;:25;;;11356:75;;;11412:4;11405:11;;;;11356:75;11337:3;;;;;;;11299:142;;;11457:5;11450:12;;11235:234;;;:::o;1005:25::-;;;;:::o;922:20::-;;;;:::o;6712:1029::-;6821:28;7017:27;7104:23;7190:16;12610:1;12563:12;:24;12576:10;12563:24;;;;;;;;;;;;;;;:43;;;:48;;12555:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6852:12;:24;6865:10;6852:24;;;;;;;;;;;;;;;:41;;6894:5;6852:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6821:79;;6945:4;6918:31;;:23;:31;;;;6910:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7093:1;7047:10;7058:5;7047:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;7017:77;;7177:3;7130:10;7141:5;7130:17;;;;;;;;;;;;;;;;;;;;:43;;;:50;;7104:76;;7209:22;:45;;;;;7236:18;7235:19;7209:45;7190:64;;7272:11;7264:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7378:4;7327:12;:24;7340:10;7327:24;;;;;;;;;;;;;;;:41;;7369:5;7327:48;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;7397:4;7396:5;7392:343;;;7463:92;7511:12;:24;7524:10;7511:24;;;;;;;;;;;;;;;:43;;;7463:10;7474:5;7463:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7417:10;7428:5;7417:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7392:343;;;7632:92;7680:12;:24;7693:10;7680:24;;;;;;;;;;;;;;;:43;;;7632:10;7643:5;7632:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7586:10;7597:5;7586:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7392:343;6712:1029;;;;;;:::o;1036:37::-;;;;:::o;1118:26::-;;;;;;;;;;;;;:::o;11101:128::-;11166:4;11210:12;;11189:18;11205:1;11189:11;:15;;:18;;;;:::i;:::-;:33;11182:40;;11101:128;;;:::o;10040:587::-;10161:15;10349:23;10431:19;12119:6;;;;;;;;;;;12111:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10117:6;;;;;;;;;;;10109:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10179:12;:27;10192:13;10179:27;;;;;;;;;;;;;;;:36;;;;;;;;;;;;10161:54;;10234:10;10233:11;10225:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10335:4;10296:12;:27;10309:13;10296:27;;;;;;;;;;;;;;;:36;;;:43;;;;;;;;;;;;;;;;;;10375:12;:27;10388:13;10375:27;;;;;;;;;;;;;;;:46;;;10349:72;;10453:64;10503:13;;10453:45;10484:4;10476:21;;;10453:18;:22;;:45;;;;:::i;:::-;:49;;:64;;;;:::i;:::-;10431:86;;10527:13;:22;;:38;10550:14;10527:38;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10527:38:0;10590:13;10580:40;;;10605:14;10580:40;;;;;;;;;;;;;;;;;;10040:587;;;;:::o;9271:693::-;9319:20;9369;9412:27;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9342:17;:15;:17::i;:::-;9319:40;;9392:10;:8;:10::i;:::-;9369:33;;9442:39;9459:21;;9442:16;:39::i;:::-;9412:69;;9499:15;:34;;;;9518:15;9499:34;:60;;;;9537:22;9499:60;9491:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9620:15;9616:272;;;9666:30;9651:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9616:272;;;9717:15;9713:175;;;9763:30;9748:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9713:175;;;9839:38;9824:12;;:53;;;;;;;;;;;;;;;;;;;;;;;;9713:175;9616:272;9906:4;9897:6;;:13;;;;;;;;;;;;;;;;;;9944:4;9936:21;;;9920:13;:37;;;;9271:693;;;:::o;8714:551::-;8802:15;12610:1;12563:12;:24;12576:10;12563:24;;;;;;;;;;;;;;;:43;;;:48;;12555:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8820:12;:24;8833:10;8820:24;;;;;;;;;;;;;;;:35;;;;;;;;;;;;8802:53;;8881:10;8873:18;;:4;:18;;;;8865:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8990:4;8952:12;:24;8965:10;8952:24;;;;;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;9009:4;9008:5;9004:255;;;9053:70;9079:12;:24;9092:10;9079:24;;;;;;;;;;;;;;;:43;;;9053:21;;:25;;:70;;;;:::i;:::-;9029:21;:94;;;;9004:255;;;9178:70;9204:12;:24;9217:10;9204:24;;;;;;;;;;;;;;;:43;;;9178:21;;:25;;:70;;;;:::i;:::-;9154:21;:94;;;;9004:255;8714:551;;:::o;1302:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11799:172::-;11890:4;11913:12;:32;11926:18;11913:32;;;;;;;;;;;;;;;:51;;;11906:58;;11799:172;;;:::o;975:24::-;;;;:::o;10724:371::-;10788:6;10847:26;12708:17;:15;:17::i;:::-;12700:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12119:6;;;;;;;;;;;12111:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10797:1;10788:10;;10783:271;10804:15;:22;;;;10800:1;:26;10783:271;;;10876:15;10892:1;10876:18;;;;;;;;;;;;;;;;;;;;;;;;;;;10847:47;;10913:12;:32;10926:18;10913:32;;;;;;;;;;;;;;;:41;;;;;;;;;;;;10912:42;10908:136;;;10974:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10908:136;10828:3;;;;;;;10783:271;;;11076:11;;;;;;;;;;;11063:25;;;11590:203;11697:4;11721:12;:32;11734:18;11721:32;;;;;;;;;;;;;;;:49;;11771:14;11721:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:72;;11590:203;;;;:::o;5068:1638::-;5166:25;5226:26;5314;5527:19;5566:6;12708:17;:15;:17::i;:::-;12700:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:10;5205:5;5194:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;5166:50;;5301:3;5255:10;5266:5;5255:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;5226:78;;5343:61;5360:10;5371:5;5360:17;;;;;;;;;;;;;;;;;;;;:43;;;5343:16;:61::i;:::-;5314:90;;5469:20;5468:21;5460:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5549:2;5527:24;;5575:1;5566:10;;5561:150;5582:10;:17;;;;5578:1;:21;5561:150;;;5624:10;5635:1;5624:13;;;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;5620:81;;;5684:1;5662:24;;5620:81;5601:3;;;;;;;5561:150;;;5761:1;5743:15;:19;5729:5;:34;5721:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5959:1;5912:10;5923:5;5912:17;;;;;;;;;;;;;;;;;;;;:43;;;:48;5908:792;;;5989:1;5980:5;:10;:43;;;;;5994:29;;;;;;;;;;;5980:43;5976:395;;;6240:1;6194:10;6205:5;6194:17;;;;;;;;;;;;;;;;;;;;:43;;:47;;;;5976:395;;;6326:30;6334:21;;6326:3;:7;;:30;;;;:::i;:::-;6280:10;6291:5;6280:17;;;;;;;;;;;;;;;;;;;;:43;;:76;;;;5976:395;5908:792;;;6544:21;:46;;;;;6569:21;6544:46;6540:160;;;6652:37;6660:28;6686:1;6660:21;;:25;;:28;;;;:::i;:::-;6652:3;:7;;:37;;;;:::i;:::-;6606:10;6617:5;6606:17;;;;;;;;;;;;;;;;;;;;:43;;:83;;;;6540:160;5908:792;5068:1638;;;;;;:::o;883:33::-;;;;:::o;7747:961::-;7828:26;7916:20;8010:25;8199:11;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:3;7857:10;7868:5;7857:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;7828:78;;7939:61;7956:10;7967:5;7956:17;;;;;;;;;;;;;;;;;;;;:43;;;7939:16;:61::i;:::-;7916:84;;8038:10;8049:5;8038:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;8010:50;;8074:21;:41;;;;;8100:15;8099:16;8074:41;:66;;;;;8120:20;8119:21;8074:66;8070:632;;;8181:4;8156:10;8167:5;8156:17;;;;;;;;;;;;;;;;;;;;:22;;;:29;;;;;;;;;;;;;;;;;;8213:10;8224:5;8213:17;;;;;;;;;;;;;;;;;;;;:24;;;8199:38;;8251:11;;;;;;;;;;;:20;;:28;8272:6;8251:28;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8251:28:0;8308:11;;;;;;;;;;;8298:30;;;8321:6;8298:30;;;;;;;;;;;;;;;;;;8430:1;8398:28;8420:5;8398:10;:17;;;;:21;;:28;;;;:::i;:::-;:33;8394:219;;;8586:11;;;;;;;;;;;8573:25;;;8394:219;8070:632;;;8643:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8070:632;7747:961;;;;;:::o;1207:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;948:21::-;;;;:::o;11977:96::-;12025:4;12053:12;;;;;;;;;;;12048:18;;;;;;;;12041:25;;11977:96;:::o;3374:1688::-;3481:20;4050:23;4124:21;12434:8;;12427:3;:15;;:38;;;;;12447:18;;;;;;;;;;;12446:19;12427:38;12419:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:27;3521:9;3504:12;;:16;;:27;;;;:::i;:::-;3481:50;;3568:9;;3549:15;:28;;3541:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4089:25;;4076:9;:38;;4050:64;;4167:9;;4148:15;:28;4124:52;;4194:18;:38;;;;4216:16;4194:38;4186:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:1;4380:12;:24;4393:10;4380:24;;;;;;;;;;;;;;;:43;;;:48;4376:502;;;4471:207;;;;;;;;;4521:9;4471:207;;;;4577:10;:17;;;;4566:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;4566:29:0;;;;4471:207;;;;4625:5;4471:207;;;;;;4658:5;4471:207;;;;;4444:12;:24;4457:10;4444:24;;;;;;;;;;;;;;;:234;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4692:15;4713:10;4692:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4692:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:502;;;4809:58;4857:9;4809:12;:24;4822:10;4809:24;;;;;;;;;;;;;;;:43;;;:47;;:58;;;;:::i;:::-;4763:12;:24;4776:10;4763:24;;;;;;;;;;;;;;;:43;;:104;;;;4376:502;4903:15;4888:12;:30;;;;4948:9;;4932:12;;:25;4928:81;;;4994:4;4973:18;;:25;;;;;;;;;;;;;;;;;;4928:81;5033:10;5023:32;;;5045:9;5023:32;;;;;;;;;;;;;;;;;;3374:1688;;;:::o;800:30::-;;;;;;;;;;;;;:::o;836:41::-;;;;;;;;;;;;;:::o;1401:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11475:109::-;11516:4;11546:8;;11539:3;:15;;:38;;;;;11559:18;;;;;;;;;;;11558:19;11539:38;11532:45;;11475:109;:::o;1060:116:2:-;1120:7;1148:2;1142;:8;;1135:16;;;;;;1169:2;1164;:7;1157:14;;1060:116;;;;:::o;1238:128::-;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;203:380::-;263:9;495:1;489:2;:7;485:36;;;513:1;506:8;;;;485:36;536:2;531;:7;527:11;;561:2;555;551:1;:6;;;;;;;;:12;544:20;;;;;;577:1;570:8;;203:380;;;;;:::o;665:283::-;725:7;941:2;936;:7;;;;;;;;929:14;;665:283;;;;:::o;87:12687:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", + "source": "pragma solidity ^0.4.24;\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n\ncontract CrowdFund {\n using SafeMath for uint256;\n\n enum FreezeReason {\n CALLER_IS_TRUSTEE,\n CROWD_FUND_FAILED,\n MAJORITY_VOTING_TO_REFUND\n }\n\n FreezeReason freezeReason;\n\n struct Milestone {\n uint amount;\n uint amountVotingAgainstPayout;\n uint payoutRequestVoteDeadline;\n bool paid;\n }\n\n struct Contributor {\n uint contributionAmount;\n // array index bool reflect milestone index vote\n bool[] milestoneNoVotes;\n bool refundVote;\n bool refunded;\n }\n\n event Deposited(address indexed payee, uint256 weiAmount);\n event Withdrawn(address indexed payee, uint256 weiAmount);\n\n bool public frozen;\n bool public isRaiseGoalReached;\n bool public immediateFirstMilestonePayout;\n uint public milestoneVotingPeriod;\n uint public deadline;\n uint public raiseGoal;\n uint public amountRaised;\n uint public frozenBalance;\n uint public minimumContributionAmount;\n uint public amountVotingForRefund;\n address public beneficiary;\n mapping(address => Contributor) public contributors;\n address[] public contributorList;\n // authorized addresses to ask for milestone payouts\n address[] public trustees;\n // constructor ensures that all values combined equal raiseGoal\n Milestone[] public milestones;\n\n constructor(\n uint _raiseGoal,\n address _beneficiary,\n address[] _trustees,\n uint[] _milestones,\n uint _deadline,\n uint _milestoneVotingPeriod,\n bool _immediateFirstMilestonePayout)\n public {\n require(_raiseGoal >= 1 ether, \"Raise goal is smaller than 1 ether\");\n require(_trustees.length >= 1 && _trustees.length <= 10, \"Trustee addresses must be at least 1 and not more than 10\");\n require(_milestones.length >= 1 && _milestones.length <= 10, \"Milestones must be at least 1 and not more than 10\");\n // TODO - require minimum duration\n // TODO - require minimum milestone voting period\n\n // ensure that cumalative milestone payouts equal raiseGoalAmount\n uint milestoneTotal = 0;\n for (uint i = 0; i < _milestones.length; i++) {\n uint milestoneAmount = _milestones[i];\n require(milestoneAmount > 0, \"Milestone amount must be greater than 0\");\n milestoneTotal = milestoneTotal.add(milestoneAmount);\n milestones.push(Milestone({\n amount: milestoneAmount,\n payoutRequestVoteDeadline: 0,\n amountVotingAgainstPayout: 0,\n paid: false\n }));\n }\n require(milestoneTotal == _raiseGoal, \"Milestone total must equal raise goal\");\n // TODO - increase minimum contribution amount is 0.1% of raise goal\n minimumContributionAmount = 1;\n raiseGoal = _raiseGoal;\n beneficiary = _beneficiary;\n trustees = _trustees;\n deadline = now + _deadline;\n milestoneVotingPeriod = _milestoneVotingPeriod;\n immediateFirstMilestonePayout = _immediateFirstMilestonePayout;\n isRaiseGoalReached = false;\n amountVotingForRefund = 0;\n frozen = false;\n // assumes no ether contributed as part of contract deployment\n amountRaised = 0;\n }\n\n function contribute() public payable onlyOnGoing onlyUnfrozen {\n // don't allow overfunding\n uint newAmountRaised = amountRaised.add(msg.value);\n require(newAmountRaised <= raiseGoal, \"Contribution exceeds the raise goal.\");\n // require minimumContributionAmount (set during construction)\n // there may be a special case where just enough has been raised so that the remaining raise amount is just smaller than the minimumContributionAmount\n // in this case, allow that the msg.value + amountRaised will equal the raiseGoal.\n // This makes sure that we don't enter a scenario where a proposal can never be fully funded\n bool greaterThanMinimum = msg.value >= minimumContributionAmount;\n bool exactlyRaiseGoal = newAmountRaised == raiseGoal;\n require(greaterThanMinimum || exactlyRaiseGoal, \"msg.value greater than minimum, or msg.value == remaining amount to be raised\");\n // in cases where an address pays > 1 times\n if (contributors[msg.sender].contributionAmount == 0) {\n contributors[msg.sender] = Contributor({\n contributionAmount: msg.value,\n milestoneNoVotes: new bool[](milestones.length),\n refundVote: false,\n refunded: false\n });\n contributorList.push(msg.sender);\n }\n else {\n contributors[msg.sender].contributionAmount = contributors[msg.sender].contributionAmount.add(msg.value);\n }\n\n amountRaised = newAmountRaised;\n if (amountRaised == raiseGoal) {\n isRaiseGoalReached = true;\n }\n emit Deposited(msg.sender, msg.value);\n }\n\n function requestMilestonePayout (uint index) public onlyTrustee onlyRaised onlyUnfrozen {\n bool milestoneAlreadyPaid = milestones[index].paid;\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline > now;\n bool majorityAgainstPayout = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n // prevent requesting paid milestones\n require(!milestoneAlreadyPaid, \"Milestone already paid\");\n\n int lowestIndexPaid = -1;\n for (uint i = 0; i < milestones.length; i++) {\n if (milestones[i].paid) {\n lowestIndexPaid = int(i);\n }\n }\n\n require(index == uint(lowestIndexPaid + 1), \"Milestone request must be for first unpaid milestone\");\n // begin grace period for contributors to vote no on milestone payout\n if (milestones[index].payoutRequestVoteDeadline == 0) {\n if (index == 0 && immediateFirstMilestonePayout) {\n // make milestone payouts immediately avtheailable for the first milestone if immediateFirstMilestonePayout is set during consutrction\n milestones[index].payoutRequestVoteDeadline = 1;\n } else {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod);\n }\n }\n // if the payoutRequestVoteDealine has passed and majority voted against it previously, begin the grace period with 2 times the deadline\n else if (voteDeadlineHasPassed && majorityAgainstPayout) {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod.mul(2));\n }\n }\n\n function voteMilestonePayout(uint index, bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool existingMilestoneNoVote = contributors[msg.sender].milestoneNoVotes[index];\n require(existingMilestoneNoVote != vote, \"Vote value must be different than existing vote state\");\n bool milestoneVotingStarted = milestones[index].payoutRequestVoteDeadline > 0;\n bool votePeriodHasEnded = milestones[index].payoutRequestVoteDeadline <= now;\n bool onGoingVote = milestoneVotingStarted && !votePeriodHasEnded;\n require(onGoingVote, \"Milestone voting must be open\");\n contributors[msg.sender].milestoneNoVotes[index] = vote;\n if (!vote) {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.sub(contributors[msg.sender].contributionAmount);\n } else {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function payMilestonePayout(uint index) public onlyRaised onlyUnfrozen {\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline < now;\n bool majorityVotedNo = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n bool milestoneAlreadyPaid = milestones[index].paid;\n if (voteDeadlineHasPassed && !majorityVotedNo && !milestoneAlreadyPaid) {\n milestones[index].paid = true;\n uint amount = milestones[index].amount;\n beneficiary.transfer(amount);\n emit Withdrawn(beneficiary, amount);\n // if the final milestone just got paid\n if (milestones.length.sub(index) == 1) {\n // useful to selfdestruct in case funds were forcefully deposited into contract. otherwise they are lost.\n selfdestruct(beneficiary);\n }\n } else {\n revert(\"required conditions were not satisfied\");\n }\n }\n\n function voteRefund(bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool refundVote = contributors[msg.sender].refundVote;\n require(vote != refundVote, \"Existing vote state is identical to vote value\");\n contributors[msg.sender].refundVote = vote;\n if (!vote) {\n amountVotingForRefund = amountVotingForRefund.sub(contributors[msg.sender].contributionAmount);\n } else {\n amountVotingForRefund = amountVotingForRefund.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function refund() public onlyUnfrozen {\n bool callerIsTrustee = isCallerTrustee();\n bool crowdFundFailed = isFailed();\n bool majorityVotingToRefund = isMajorityVoting(amountVotingForRefund);\n require(callerIsTrustee || crowdFundFailed || majorityVotingToRefund, \"Required conditions for refund are not met\");\n if (callerIsTrustee) {\n freezeReason = FreezeReason.CALLER_IS_TRUSTEE;\n } else if (crowdFundFailed) {\n freezeReason = FreezeReason.CROWD_FUND_FAILED;\n } else {\n freezeReason = FreezeReason.MAJORITY_VOTING_TO_REFUND;\n }\n frozen = true;\n frozenBalance = address(this).balance;\n }\n\n // anyone can refund a contributor if a crowdfund has been frozen\n function withdraw(address refundAddress) public onlyFrozen {\n require(frozen, \"CrowdFund is not frozen\");\n bool isRefunded = contributors[refundAddress].refunded;\n require(!isRefunded, \"Specified address is already refunded\");\n contributors[refundAddress].refunded = true;\n uint contributionAmount = contributors[refundAddress].contributionAmount;\n uint amountToRefund = contributionAmount.mul(address(this).balance).div(frozenBalance);\n refundAddress.transfer(amountToRefund);\n emit Withdrawn(refundAddress, amountToRefund);\n }\n\n // it may be useful to selfdestruct in case funds were force deposited to the contract\n function destroy() public onlyTrustee onlyFrozen {\n for (uint i = 0; i < contributorList.length; i++) {\n address contributorAddress = contributorList[i];\n if (!contributors[contributorAddress].refunded) {\n revert(\"At least one contributor has not yet refunded\");\n }\n }\n selfdestruct(beneficiary);\n }\n\n function isMajorityVoting(uint valueVoting) public view returns (bool) {\n return valueVoting.mul(2) > amountRaised;\n }\n\n function isCallerTrustee() public view returns (bool) {\n for (uint i = 0; i < trustees.length; i++) {\n if (msg.sender == trustees[i]) {\n return true;\n }\n }\n return false;\n }\n\n function isFailed() public view returns (bool) {\n return now >= deadline && !isRaiseGoalReached;\n }\n\n function getContributorMilestoneVote(address contributorAddress, uint milestoneIndex) public view returns (bool) { \n return contributors[contributorAddress].milestoneNoVotes[milestoneIndex];\n }\n\n function getContributorContributionAmount(address contributorAddress) public view returns (uint) {\n return contributors[contributorAddress].contributionAmount;\n }\n\n function getFreezeReason() public view returns (uint) {\n return uint(freezeReason);\n }\n\n modifier onlyFrozen() {\n require(frozen, \"CrowdFund is not frozen\");\n _;\n }\n\n modifier onlyUnfrozen() {\n require(!frozen, \"CrowdFund is frozen\");\n _;\n }\n\n modifier onlyRaised() {\n require(isRaiseGoalReached, \"Raise goal is not reached\");\n _;\n }\n\n modifier onlyOnGoing() {\n require(now <= deadline && !isRaiseGoalReached, \"CrowdFund is not ongoing\");\n _;\n }\n\n modifier onlyContributor() {\n require(contributors[msg.sender].contributionAmount != 0, \"Caller is not a contributor\");\n _;\n }\n\n modifier onlyTrustee() {\n require(isCallerTrustee(), \"Caller is not a trustee\");\n _;\n }\n\n}\n", + "sourcePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", "ast": { - "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", "exportedSymbols": { "CrowdFund": [ - 1080 + 1076 ] }, - "id": 1081, + "id": 1077, "nodeType": "SourceUnit", "nodes": [ { @@ -557,8 +557,8 @@ "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", "id": 2, "nodeType": "ImportDirective", - "scope": 1081, - "sourceUnit": 1233, + "scope": 1077, + "sourceUnit": 1229, "src": "25:59:0", "symbolAliases": [], "unitAlias": "" @@ -569,9 +569,9 @@ "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1080, + "id": 1076, "linearizedBaseContracts": [ - 1080 + 1076 ], "name": "CrowdFund", "nodeType": "ContractDefinition", @@ -583,10 +583,10 @@ "id": 3, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1232, + "referencedDeclaration": 1228, "src": "118:8:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1232", + "typeIdentifier": "t_contract$_SafeMath_$1228", "typeString": "library SafeMath" } }, @@ -635,7 +635,7 @@ "id": 11, "name": "freezeReason", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "264:25:0", "stateVariable": true, "storageLocation": "default", @@ -769,7 +769,7 @@ ], "name": "Milestone", "nodeType": "StructDefinition", - "scope": 1080, + "scope": 1076, "src": "296:144:0", "visibility": "public" }, @@ -894,7 +894,7 @@ ], "name": "Contributor", "nodeType": "StructDefinition", - "scope": 1080, + "scope": 1076, "src": "446:197:0", "visibility": "public" }, @@ -1041,7 +1041,7 @@ "id": 44, "name": "frozen", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "776:18:0", "stateVariable": true, "storageLocation": "default", @@ -1067,7 +1067,7 @@ "id": 46, "name": "isRaiseGoalReached", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "800:30:0", "stateVariable": true, "storageLocation": "default", @@ -1093,7 +1093,7 @@ "id": 48, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "836:41:0", "stateVariable": true, "storageLocation": "default", @@ -1119,7 +1119,7 @@ "id": 50, "name": "milestoneVotingPeriod", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "883:33:0", "stateVariable": true, "storageLocation": "default", @@ -1145,7 +1145,7 @@ "id": 52, "name": "deadline", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "922:20:0", "stateVariable": true, "storageLocation": "default", @@ -1171,7 +1171,7 @@ "id": 54, "name": "raiseGoal", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "948:21:0", "stateVariable": true, "storageLocation": "default", @@ -1197,7 +1197,7 @@ "id": 56, "name": "amountRaised", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "975:24:0", "stateVariable": true, "storageLocation": "default", @@ -1223,7 +1223,7 @@ "id": 58, "name": "frozenBalance", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1005:25:0", "stateVariable": true, "storageLocation": "default", @@ -1249,7 +1249,7 @@ "id": 60, "name": "minimumContributionAmount", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1036:37:0", "stateVariable": true, "storageLocation": "default", @@ -1275,7 +1275,7 @@ "id": 62, "name": "amountVotingForRefund", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1079:33:0", "stateVariable": true, "storageLocation": "default", @@ -1301,7 +1301,7 @@ "id": 64, "name": "beneficiary", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1118:26:0", "stateVariable": true, "storageLocation": "default", @@ -1327,7 +1327,7 @@ "id": 68, "name": "contributors", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1150:51:0", "stateVariable": true, "storageLocation": "default", @@ -1374,7 +1374,7 @@ "id": 71, "name": "contributorList", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1207:32:0", "stateVariable": true, "storageLocation": "default", @@ -1410,7 +1410,7 @@ "id": 74, "name": "trustees", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1302:25:0", "stateVariable": true, "storageLocation": "default", @@ -1446,7 +1446,7 @@ "id": 77, "name": "milestones", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1401:29:0", "stateVariable": true, "storageLocation": "default", @@ -1573,10 +1573,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "1689:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -1790,10 +1790,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "1767:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -2007,10 +2007,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "1894:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -2259,10 +2259,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "2338:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -2354,7 +2354,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "2440:18:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -2783,10 +2783,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "2713:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -3040,7 +3040,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "3026:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -3600,7 +3600,7 @@ "parameters": [], "src": "1679:0:0" }, - "scope": 1080, + "scope": 1076, "src": "1437:1931:0", "stateMutability": "nonpayable", "superFunction": null, @@ -3656,7 +3656,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "3521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -3705,7 +3705,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "3504:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -3812,10 +3812,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "3541:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -3892,7 +3892,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4076:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4101,10 +4101,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "4186:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -4167,7 +4167,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4393:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4278,7 +4278,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4776:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4337,7 +4337,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4857:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4392,7 +4392,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4822:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4445,7 +4445,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "4809:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -4518,7 +4518,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4457:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4563,7 +4563,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4761,7 +4761,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4713:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -5005,7 +5005,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "5033:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -5034,7 +5034,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "5045:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -5113,7 +5113,7 @@ "name": "onlyOnGoing", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1054, + "referencedDeclaration": 1050, "src": "3411:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -5132,7 +5132,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, + "referencedDeclaration": 1027, "src": "3423:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -5158,7 +5158,7 @@ "parameters": [], "src": "3436:0:0" }, - "scope": 1080, + "scope": 1076, "src": "3374:1688:0", "stateMutability": "payable", "superFunction": null, @@ -5370,7 +5370,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "5301:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -5490,7 +5490,7 @@ "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, + "referencedDeclaration": 924, "src": "5343:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", @@ -5581,10 +5581,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "5460:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -6151,10 +6151,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "5721:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -6446,7 +6446,7 @@ "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1173, + "referencedDeclaration": 1169, "src": "6660:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -6481,7 +6481,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "6652:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -6495,7 +6495,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "6652:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -6721,7 +6721,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "6326:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -6735,7 +6735,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "6326:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -6893,7 +6893,7 @@ "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1079, + "referencedDeclaration": 1075, "src": "5120:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -6912,7 +6912,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1040, + "referencedDeclaration": 1036, "src": "5132:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -6931,7 +6931,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, + "referencedDeclaration": 1027, "src": "5143:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -6984,7 +6984,7 @@ "parameters": [], "src": "5156:0:0" }, - "scope": 1080, + "scope": 1076, "src": "5068:1638:0", "stateMutability": "nonpayable", "superFunction": null, @@ -6992,9 +6992,9 @@ }, { "body": { - "id": 591, + "id": 589, "nodeType": "Block", - "src": "6811:940:0", + "src": "6811:930:0", "statements": [ { "assignments": [ @@ -7006,7 +7006,7 @@ "id": 494, "name": "existingMilestoneNoVote", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "6821:28:0", "stateVariable": false, "storageLocation": "default", @@ -7057,7 +7057,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "6865:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -7214,10 +7214,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "6910:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -7252,7 +7252,7 @@ "id": 511, "name": "milestoneVotingStarted", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "7017:27:0", "stateVariable": false, "storageLocation": "default", @@ -7381,7 +7381,7 @@ "id": 520, "name": "votePeriodHasEnded", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "7104:23:0", "stateVariable": false, "storageLocation": "default", @@ -7479,7 +7479,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "7177:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -7505,7 +7505,7 @@ "id": 529, "name": "onGoingVote", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "7190:16:0", "stateVariable": false, "storageLocation": "default", @@ -7643,10 +7643,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "7264:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -7707,7 +7707,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "7340:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -7834,277 +7834,258 @@ } }, "falseBody": { - "condition": { - "argumentTypes": null, - "id": 570, - "name": "vote", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 484, - "src": "7576:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 589, - "nodeType": "IfStatement", - "src": "7572:173:0", - "trueBody": { - "id": 588, - "nodeType": "Block", - "src": "7582:163:0", - "statements": [ - { - "expression": { + "id": 587, + "nodeType": "Block", + "src": "7572:163:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { "argumentTypes": null, - "id": 586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { + "expression": { "argumentTypes": null, - "expression": { + "baseExpression": { "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 571, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7596:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 573, - "indexExpression": { - "argumentTypes": null, - "id": 572, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7607:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7596:17:0", + "id": 570, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7586:10:0", "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 572, + "indexExpression": { + "argumentTypes": null, + "id": 571, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7597:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" } }, - "id": 574, "isConstant": false, "isLValue": true, "isPure": false, - "lValueRequested": true, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7596:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 580, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "7690:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 583, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 581, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "7703:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7703:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7690:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 584, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "7690:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 575, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7642:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 577, - "indexExpression": { - "argumentTypes": null, - "id": 576, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7653:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7642:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" - } - }, - "id": 578, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7642:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1231, - "src": "7642:47:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7642:92:0", + "nodeType": "IndexAccess", + "src": "7586:17:0", "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" } }, - "src": "7596:138:0", + "id": 573, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7586:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 587, - "nodeType": "ExpressionStatement", - "src": "7596:138:0" - } - ] - } + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 579, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "7680:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 582, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 580, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1243, + "src": "7693:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7693:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7680:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 583, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "7680:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 574, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7632:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 576, + "indexExpression": { + "argumentTypes": null, + "id": 575, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7643:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7632:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" + } + }, + "id": 577, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7632:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 1227, + "src": "7632:47:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7632:92:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7586:138:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 586, + "nodeType": "ExpressionStatement", + "src": "7586:138:0" + } + ] }, - "id": 590, + "id": 588, "nodeType": "IfStatement", - "src": "7392:353:0", + "src": "7392:343:0", "trueBody": { "id": 569, "nodeType": "Block", @@ -8205,7 +8186,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "7524:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -8322,7 +8303,7 @@ "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1207, + "referencedDeclaration": 1203, "src": "7463:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -8359,7 +8340,7 @@ ] }, "documentation": null, - "id": 592, + "id": 590, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -8373,7 +8354,7 @@ "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1069, + "referencedDeclaration": 1065, "src": "6771:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -8392,7 +8373,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1040, + "referencedDeclaration": 1036, "src": "6787:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -8411,7 +8392,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, + "referencedDeclaration": 1027, "src": "6798:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -8433,7 +8414,7 @@ "id": 482, "name": "index", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "6741:10:0", "stateVariable": false, "storageLocation": "default", @@ -8459,7 +8440,7 @@ "id": 484, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "6753:9:0", "stateVariable": false, "storageLocation": "default", @@ -8490,30 +8471,30 @@ "parameters": [], "src": "6811:0:0" }, - "scope": 1080, - "src": "6712:1039:0", + "scope": 1076, + "src": "6712:1029:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 678, + "id": 676, "nodeType": "Block", - "src": "7828:890:0", + "src": "7818:890:0", "statements": [ { "assignments": [ - 602 + 600 ], "declarations": [ { "constant": false, - "id": 602, + "id": 600, "name": "voteDeadlineHasPassed", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "7838:26:0", + "scope": 677, + "src": "7828:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8521,10 +8502,10 @@ "typeString": "bool" }, "typeName": { - "id": 601, + "id": 599, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7838:4:0", + "src": "7828:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8534,14 +8515,14 @@ "visibility": "internal" } ], - "id": 609, + "id": 607, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 608, + "id": 606, "isConstant": false, "isLValue": false, "isPure": false, @@ -8552,26 +8533,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 603, + "id": 601, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7867:10:0", + "src": "7857:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 605, + "id": 603, "indexExpression": { "argumentTypes": null, - "id": 604, + "id": 602, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "7878:5:0", + "referencedDeclaration": 592, + "src": "7868:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8582,13 +8563,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7867:17:0", + "src": "7857:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 606, + "id": 604, "isConstant": false, "isLValue": true, "isPure": false, @@ -8596,7 +8577,7 @@ "memberName": "payoutRequestVoteDeadline", "nodeType": "MemberAccess", "referencedDeclaration": 17, - "src": "7867:43:0", + "src": "7857:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8606,38 +8587,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 607, + "id": 605, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, - "src": "7913:3:0", + "referencedDeclaration": 1245, + "src": "7903:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7867:49:0", + "src": "7857:49:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7838:78:0" + "src": "7828:78:0" }, { "assignments": [ - 611 + 609 ], "declarations": [ { "constant": false, - "id": 611, + "id": 609, "name": "majorityVotedNo", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "7926:20:0", + "scope": 677, + "src": "7916:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8645,10 +8626,10 @@ "typeString": "bool" }, "typeName": { - "id": 610, + "id": 608, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7926:4:0", + "src": "7916:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8658,7 +8639,7 @@ "visibility": "internal" } ], - "id": 618, + "id": 616, "initialValue": { "argumentTypes": null, "arguments": [ @@ -8668,26 +8649,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 613, + "id": 611, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7966:10:0", + "src": "7956:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 615, + "id": 613, "indexExpression": { "argumentTypes": null, - "id": 614, + "id": 612, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "7977:5:0", + "referencedDeclaration": 592, + "src": "7967:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8698,13 +8679,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7966:17:0", + "src": "7956:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 616, + "id": 614, "isConstant": false, "isLValue": true, "isPure": false, @@ -8712,7 +8693,7 @@ "memberName": "amountVotingAgainstPayout", "nodeType": "MemberAccess", "referencedDeclaration": 15, - "src": "7966:43:0", + "src": "7956:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8726,18 +8707,18 @@ "typeString": "uint256" } ], - "id": 612, + "id": 610, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "7949:16:0", + "referencedDeclaration": 924, + "src": "7939:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 617, + "id": 615, "isConstant": false, "isLValue": false, "isPure": false, @@ -8745,27 +8726,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7949:61:0", + "src": "7939:61:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7926:84:0" + "src": "7916:84:0" }, { "assignments": [ - 620 + 618 ], "declarations": [ { "constant": false, - "id": 620, + "id": 618, "name": "milestoneAlreadyPaid", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "8020:25:0", + "scope": 677, + "src": "8010:25:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8773,10 +8754,10 @@ "typeString": "bool" }, "typeName": { - "id": 619, + "id": 617, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8020:4:0", + "src": "8010:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8786,33 +8767,33 @@ "visibility": "internal" } ], - "id": 625, + "id": 623, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 621, + "id": 619, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8048:10:0", + "src": "8038:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 623, + "id": 621, "indexExpression": { "argumentTypes": null, - "id": 622, + "id": 620, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8059:5:0", + "referencedDeclaration": 592, + "src": "8049:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8823,13 +8804,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8048:17:0", + "src": "8038:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 624, + "id": 622, "isConstant": false, "isLValue": true, "isPure": false, @@ -8837,14 +8818,14 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8048:22:0", + "src": "8038:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8020:50:0" + "src": "8010:50:0" }, { "condition": { @@ -8853,7 +8834,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 632, + "id": 630, "isConstant": false, "isLValue": false, "isPure": false, @@ -8864,19 +8845,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 629, + "id": 627, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 626, + "id": 624, "name": "voteDeadlineHasPassed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 602, - "src": "8084:21:0", + "referencedDeclaration": 600, + "src": "8074:21:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8886,7 +8867,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 628, + "id": 626, "isConstant": false, "isLValue": false, "isPure": false, @@ -8894,15 +8875,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8109:16:0", + "src": "8099:16:0", "subExpression": { "argumentTypes": null, - "id": 627, + "id": 625, "name": "majorityVotedNo", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 611, - "src": "8110:15:0", + "referencedDeclaration": 609, + "src": "8100:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8913,7 +8894,7 @@ "typeString": "bool" } }, - "src": "8084:41:0", + "src": "8074:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8923,7 +8904,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 631, + "id": 629, "isConstant": false, "isLValue": false, "isPure": false, @@ -8931,15 +8912,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8129:21:0", + "src": "8119:21:0", "subExpression": { "argumentTypes": null, - "id": 630, + "id": 628, "name": "milestoneAlreadyPaid", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 620, - "src": "8130:20:0", + "referencedDeclaration": 618, + "src": "8120:20:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8950,16 +8931,16 @@ "typeString": "bool" } }, - "src": "8084:66:0", + "src": "8074:66:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 676, + "id": 674, "nodeType": "Block", - "src": "8639:73:0", + "src": "8629:73:0", "statements": [ { "expression": { @@ -8968,14 +8949,14 @@ { "argumentTypes": null, "hexValue": "726571756972656420636f6e646974696f6e732077657265206e6f7420736174697366696564", - "id": 673, + "id": 671, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8660:40:0", + "src": "8650:40:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c944a403407a4b450cdf033de02e1e093564ed6120fdd470c5daee653f2d6a87", @@ -8991,21 +8972,21 @@ "typeString": "literal_string \"required conditions were not satisfied\"" } ], - "id": 672, + "id": 670, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1252, - 1253 + 1248, + 1249 ], - "referencedDeclaration": 1253, - "src": "8653:6:0", + "referencedDeclaration": 1249, + "src": "8643:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 674, + "id": 672, "isConstant": false, "isLValue": false, "isPure": false, @@ -9013,30 +8994,30 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8653:48:0", + "src": "8643:48:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 675, + "id": 673, "nodeType": "ExpressionStatement", - "src": "8653:48:0" + "src": "8643:48:0" } ] }, - "id": 677, + "id": 675, "nodeType": "IfStatement", - "src": "8080:632:0", + "src": "8070:632:0", "trueBody": { - "id": 671, + "id": 669, "nodeType": "Block", - "src": "8152:481:0", + "src": "8142:481:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 638, + "id": 636, "isConstant": false, "isLValue": false, "isPure": false, @@ -9047,26 +9028,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 633, + "id": 631, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8166:10:0", + "src": "8156:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 635, + "id": 633, "indexExpression": { "argumentTypes": null, - "id": 634, + "id": 632, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8177:5:0", + "referencedDeclaration": 592, + "src": "8167:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9077,13 +9058,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8166:17:0", + "src": "8156:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 636, + "id": 634, "isConstant": false, "isLValue": true, "isPure": false, @@ -9091,7 +9072,7 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8166:22:0", + "src": "8156:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9102,14 +9083,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 637, + "id": 635, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8191:4:0", + "src": "8181:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -9117,28 +9098,28 @@ }, "value": "true" }, - "src": "8166:29:0", + "src": "8156:29:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 639, + "id": 637, "nodeType": "ExpressionStatement", - "src": "8166:29:0" + "src": "8156:29:0" }, { "assignments": [ - 641 + 639 ], "declarations": [ { "constant": false, - "id": 641, + "id": 639, "name": "amount", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "8209:11:0", + "scope": 677, + "src": "8199:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9146,10 +9127,10 @@ "typeString": "uint256" }, "typeName": { - "id": 640, + "id": 638, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "8209:4:0", + "src": "8199:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9159,33 +9140,33 @@ "visibility": "internal" } ], - "id": 646, + "id": 644, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 642, + "id": 640, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8223:10:0", + "src": "8213:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 644, + "id": 642, "indexExpression": { "argumentTypes": null, - "id": 643, + "id": 641, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8234:5:0", + "referencedDeclaration": 592, + "src": "8224:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9196,13 +9177,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8223:17:0", + "src": "8213:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 645, + "id": 643, "isConstant": false, "isLValue": true, "isPure": false, @@ -9210,14 +9191,14 @@ "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 13, - "src": "8223:24:0", + "src": "8213:24:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "8209:38:0" + "src": "8199:38:0" }, { "expression": { @@ -9225,12 +9206,12 @@ "arguments": [ { "argumentTypes": null, - "id": 650, + "id": 648, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "8282:6:0", + "referencedDeclaration": 639, + "src": "8272:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9246,18 +9227,18 @@ ], "expression": { "argumentTypes": null, - "id": 647, + "id": 645, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8261:11:0", + "src": "8251:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 649, + "id": 647, "isConstant": false, "isLValue": false, "isPure": false, @@ -9265,13 +9246,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8261:20:0", + "src": "8251:20:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 651, + "id": 649, "isConstant": false, "isLValue": false, "isPure": false, @@ -9279,15 +9260,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8261:28:0", + "src": "8251:28:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 652, + "id": 650, "nodeType": "ExpressionStatement", - "src": "8261:28:0" + "src": "8251:28:0" }, { "eventCall": { @@ -9295,12 +9276,12 @@ "arguments": [ { "argumentTypes": null, - "id": 654, + "id": 652, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8318:11:0", + "src": "8308:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9308,12 +9289,12 @@ }, { "argumentTypes": null, - "id": 655, + "id": 653, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "8331:6:0", + "referencedDeclaration": 639, + "src": "8321:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9331,18 +9312,18 @@ "typeString": "uint256" } ], - "id": 653, + "id": 651, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "8308:9:0", + "src": "8298:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 656, + "id": 654, "isConstant": false, "isLValue": false, "isPure": false, @@ -9350,15 +9331,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8308:30:0", + "src": "8298:30:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 657, + "id": 655, "nodeType": "EmitStatement", - "src": "8303:35:0" + "src": "8293:35:0" }, { "condition": { @@ -9367,7 +9348,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 664, + "id": 662, "isConstant": false, "isLValue": false, "isPure": false, @@ -9377,12 +9358,12 @@ "arguments": [ { "argumentTypes": null, - "id": 661, + "id": 659, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8430:5:0", + "referencedDeclaration": 592, + "src": "8420:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9400,18 +9381,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 658, + "id": 656, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8408:10:0", + "src": "8398:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 659, + "id": 657, "isConstant": false, "isLValue": true, "isPure": false, @@ -9419,27 +9400,27 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8408:17:0", + "src": "8398:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 660, + "id": 658, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1207, - "src": "8408:21:0", + "referencedDeclaration": 1203, + "src": "8398:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 662, + "id": 660, "isConstant": false, "isLValue": false, "isPure": false, @@ -9447,7 +9428,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8408:28:0", + "src": "8398:28:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9458,14 +9439,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 663, + "id": 661, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8440:1:0", + "src": "8430:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -9473,20 +9454,20 @@ }, "value": "1" }, - "src": "8408:33:0", + "src": "8398:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 670, + "id": 668, "nodeType": "IfStatement", - "src": "8404:219:0", + "src": "8394:219:0", "trueBody": { - "id": 669, + "id": 667, "nodeType": "Block", - "src": "8443:180:0", + "src": "8433:180:0", "statements": [ { "expression": { @@ -9494,12 +9475,12 @@ "arguments": [ { "argumentTypes": null, - "id": 666, + "id": 664, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8596:11:0", + "src": "8586:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9513,18 +9494,18 @@ "typeString": "address" } ], - "id": 665, + "id": 663, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "8583:12:0", + "referencedDeclaration": 1251, + "src": "8573:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 667, + "id": 665, "isConstant": false, "isLValue": false, "isPure": false, @@ -9532,15 +9513,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8583:25:0", + "src": "8573:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 668, + "id": 666, "nodeType": "ExpressionStatement", - "src": "8583:25:0" + "src": "8573:25:0" } ] } @@ -9551,63 +9532,63 @@ ] }, "documentation": null, - "id": 679, + "id": 677, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ + { + "arguments": null, + "id": 595, + "modifierName": { + "argumentTypes": null, + "id": 594, + "name": "onlyRaised", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1036, + "src": "7794:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7794:10:0" + }, { "arguments": null, "id": 597, "modifierName": { "argumentTypes": null, "id": 596, - "name": "onlyRaised", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1040, - "src": "7804:10:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "7804:10:0" - }, - { - "arguments": null, - "id": 599, - "modifierName": { - "argumentTypes": null, - "id": 598, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "7815:12:0", + "referencedDeclaration": 1027, + "src": "7805:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "7815:12:0" + "src": "7805:12:0" } ], "name": "payMilestonePayout", "nodeType": "FunctionDefinition", "parameters": { - "id": 595, + "id": 593, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 594, + "id": 592, "name": "index", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "7785:10:0", + "scope": 677, + "src": "7775:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9615,10 +9596,10 @@ "typeString": "uint256" }, "typeName": { - "id": 593, + "id": 591, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "7785:4:0", + "src": "7775:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9628,39 +9609,39 @@ "visibility": "internal" } ], - "src": "7784:12:0" + "src": "7774:12:0" }, "payable": false, "returnParameters": { - "id": 600, + "id": 598, "nodeType": "ParameterList", "parameters": [], - "src": "7828:0:0" + "src": "7818:0:0" }, - "scope": 1080, - "src": "7757:961:0", + "scope": 1076, + "src": "7747:961:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 742, + "id": 738, "nodeType": "Block", - "src": "8802:491:0", + "src": "8792:473:0", "statements": [ { "assignments": [ - 691 + 689 ], "declarations": [ { "constant": false, - "id": 691, + "id": 689, "name": "refundVote", "nodeType": "VariableDeclaration", - "scope": 743, - "src": "8812:15:0", + "scope": 739, + "src": "8802:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9668,10 +9649,10 @@ "typeString": "bool" }, "typeName": { - "id": 690, + "id": 688, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8812:4:0", + "src": "8802:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9681,41 +9662,41 @@ "visibility": "internal" } ], - "id": 697, + "id": 695, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 692, + "id": 690, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8830:12:0", + "src": "8820:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 695, + "id": 693, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 693, + "id": 691, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "8843:3:0", + "referencedDeclaration": 1243, + "src": "8833:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 694, + "id": 692, "isConstant": false, "isLValue": false, "isPure": false, @@ -9723,7 +9704,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8843:10:0", + "src": "8833:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9734,13 +9715,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8830:24:0", + "src": "8820:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 696, + "id": 694, "isConstant": false, "isLValue": true, "isPure": false, @@ -9748,14 +9729,14 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8830:35:0", + "src": "8820:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8812:53:0" + "src": "8802:53:0" }, { "expression": { @@ -9767,19 +9748,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 701, + "id": 699, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 699, + "id": 697, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "8883:4:0", + "referencedDeclaration": 679, + "src": "8873:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9789,18 +9770,18 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 700, + "id": 698, "name": "refundVote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 691, - "src": "8891:10:0", + "referencedDeclaration": 689, + "src": "8881:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8883:18:0", + "src": "8873:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9809,14 +9790,14 @@ { "argumentTypes": null, "hexValue": "4578697374696e6720766f7465207374617465206973206964656e746963616c20746f20766f74652076616c7565", - "id": 702, + "id": 700, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8903:48:0", + "src": "8893:48:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_83d9b841f406ef52e32942228e28c13fcdb47e5fa9512f22f335b7955cb71cb5", @@ -9836,21 +9817,21 @@ "typeString": "literal_string \"Existing vote state is identical to vote value\"" } ], - "id": 698, + "id": 696, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "8875:7:0", + "referencedDeclaration": 1247, + "src": "8865:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 703, + "id": 701, "isConstant": false, "isLValue": false, "isPure": false, @@ -9858,20 +9839,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8875:77:0", + "src": "8865:77:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 704, + "id": 702, "nodeType": "ExpressionStatement", - "src": "8875:77:0" + "src": "8865:77:0" }, { "expression": { "argumentTypes": null, - "id": 711, + "id": 709, "isConstant": false, "isLValue": false, "isPure": false, @@ -9882,34 +9863,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 705, + "id": 703, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8962:12:0", + "src": "8952:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 708, + "id": 706, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 706, + "id": 704, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "8975:3:0", + "referencedDeclaration": 1243, + "src": "8965:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 707, + "id": 705, "isConstant": false, "isLValue": false, "isPure": false, @@ -9917,7 +9898,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8975:10:0", + "src": "8965:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9928,13 +9909,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8962:24:0", + "src": "8952:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 709, + "id": 707, "isConstant": false, "isLValue": true, "isPure": false, @@ -9942,7 +9923,7 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8962:35:0", + "src": "8952:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9952,31 +9933,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 710, + "id": 708, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "9000:4:0", + "referencedDeclaration": 679, + "src": "8990:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8962:42:0", + "src": "8952:42:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 712, + "id": 710, "nodeType": "ExpressionStatement", - "src": "8962:42:0" + "src": "8952:42:0" }, { "condition": { "argumentTypes": null, - "id": 714, + "id": 712, "isConstant": false, "isLValue": false, "isPure": false, @@ -9984,15 +9965,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "9018:5:0", + "src": "9008:5:0", "subExpression": { "argumentTypes": null, - "id": 713, + "id": 711, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "9019:4:0", + "referencedDeclaration": 679, + "src": "9009:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10004,212 +9985,26 @@ } }, "falseBody": { - "condition": { - "argumentTypes": null, - "id": 727, - "name": "vote", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "9162:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 740, - "nodeType": "IfStatement", - "src": "9158:129:0", - "trueBody": { - "id": 739, - "nodeType": "Block", - "src": "9168:119:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 728, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9182:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 731, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "9232:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 734, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 732, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "9245:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9245:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9232:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 735, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "9232:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 729, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9206:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1231, - "src": "9206:25:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 736, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9206:70:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9182:94:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 738, - "nodeType": "ExpressionStatement", - "src": "9182:94:0" - } - ] - } - }, - "id": 741, - "nodeType": "IfStatement", - "src": "9014:273:0", - "trueBody": { - "id": 726, + "id": 736, "nodeType": "Block", - "src": "9025:119:0", + "src": "9140:119:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 724, + "id": 734, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 715, + "id": 725, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9039:21:0", + "src": "9154:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10226,34 +10021,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 718, + "id": 728, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "9089:12:0", + "src": "9204:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 721, + "id": 731, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 719, + "id": 729, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "9102:3:0", + "referencedDeclaration": 1243, + "src": "9217:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 720, + "id": 730, "isConstant": false, "isLValue": false, "isPure": false, @@ -10261,7 +10056,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9102:10:0", + "src": "9217:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10272,13 +10067,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "9089:24:0", + "src": "9204:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 722, + "id": 732, "isConstant": false, "isLValue": true, "isPure": false, @@ -10286,7 +10081,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "9089:43:0", + "src": "9204:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10302,32 +10097,32 @@ ], "expression": { "argumentTypes": null, - "id": 716, + "id": 726, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9063:21:0", + "src": "9178:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 717, + "id": 727, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberName": "sub", + "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1207, - "src": "9063:25:0", + "referencedDeclaration": 1227, + "src": "9178:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 723, + "id": 733, "isConstant": false, "isLValue": false, "isPure": false, @@ -10335,21 +10130,188 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9063:70:0", + "src": "9178:70:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9039:94:0", + "src": "9154:94:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 725, + "id": 735, "nodeType": "ExpressionStatement", - "src": "9039:94:0" + "src": "9154:94:0" + } + ] + }, + "id": 737, + "nodeType": "IfStatement", + "src": "9004:255:0", + "trueBody": { + "id": 724, + "nodeType": "Block", + "src": "9015:119:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 713, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9029:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 716, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "9079:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 719, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 717, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1243, + "src": "9092:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9092:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9079:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 720, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "9079:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 714, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9053:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 1203, + "src": "9053:25:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9053:70:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9029:94:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 723, + "nodeType": "ExpressionStatement", + "src": "9029:94:0" } ] } @@ -10357,29 +10319,48 @@ ] }, "documentation": null, - "id": 743, + "id": 739, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 684, + "id": 682, "modifierName": { "argumentTypes": null, - "id": 683, + "id": 681, "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "8762:15:0", + "referencedDeclaration": 1065, + "src": "8752:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8762:15:0" + "src": "8752:15:0" + }, + { + "arguments": null, + "id": 684, + "modifierName": { + "argumentTypes": null, + "id": 683, + "name": "onlyRaised", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1036, + "src": "8768:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8768:10:0" }, { "arguments": null, @@ -10387,52 +10368,33 @@ "modifierName": { "argumentTypes": null, "id": 685, - "name": "onlyRaised", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1040, - "src": "8778:10:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "8778:10:0" - }, - { - "arguments": null, - "id": 688, - "modifierName": { - "argumentTypes": null, - "id": 687, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "8789:12:0", + "referencedDeclaration": 1027, + "src": "8779:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8789:12:0" + "src": "8779:12:0" } ], "name": "voteRefund", "nodeType": "FunctionDefinition", "parameters": { - "id": 682, + "id": 680, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 681, + "id": 679, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 743, - "src": "8744:9:0", + "scope": 739, + "src": "8734:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10440,10 +10402,10 @@ "typeString": "bool" }, "typeName": { - "id": 680, + "id": 678, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8744:4:0", + "src": "8734:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10453,39 +10415,39 @@ "visibility": "internal" } ], - "src": "8743:11:0" + "src": "8733:11:0" }, "payable": false, "returnParameters": { - "id": 689, + "id": 687, "nodeType": "ParameterList", "parameters": [], - "src": "8802:0:0" + "src": "8792:0:0" }, - "scope": 1080, - "src": "8724:569:0", + "scope": 1076, + "src": "8714:551:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 806, + "id": 802, "nodeType": "Block", - "src": "9337:655:0", + "src": "9309:655:0", "statements": [ { "assignments": [ - 749 + 745 ], "declarations": [ { "constant": false, - "id": 749, + "id": 745, "name": "callerIsTrustee", "nodeType": "VariableDeclaration", - "scope": 807, - "src": "9347:20:0", + "scope": 803, + "src": "9319:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10493,10 +10455,10 @@ "typeString": "bool" }, "typeName": { - "id": 748, + "id": 744, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9347:4:0", + "src": "9319:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10506,24 +10468,24 @@ "visibility": "internal" } ], - "id": 752, + "id": 748, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 750, + "id": 746, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 959, - "src": "9370:15:0", + "referencedDeclaration": 955, + "src": "9342:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 751, + "id": 747, "isConstant": false, "isLValue": false, "isPure": false, @@ -10531,27 +10493,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9370:17:0", + "src": "9342:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9347:40:0" + "src": "9319:40:0" }, { "assignments": [ - 754 + 750 ], "declarations": [ { "constant": false, - "id": 754, + "id": 750, "name": "crowdFundFailed", "nodeType": "VariableDeclaration", - "scope": 807, - "src": "9397:20:0", + "scope": 803, + "src": "9369:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10559,10 +10521,10 @@ "typeString": "bool" }, "typeName": { - "id": 753, + "id": 749, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9397:4:0", + "src": "9369:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10572,24 +10534,24 @@ "visibility": "internal" } ], - "id": 757, + "id": 753, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 755, + "id": 751, "name": "isFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "9420:8:0", + "referencedDeclaration": 968, + "src": "9392:8:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 756, + "id": 752, "isConstant": false, "isLValue": false, "isPure": false, @@ -10597,27 +10559,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9420:10:0", + "src": "9392:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9397:33:0" + "src": "9369:33:0" }, { "assignments": [ - 759 + 755 ], "declarations": [ { "constant": false, - "id": 759, + "id": 755, "name": "majorityVotingToRefund", "nodeType": "VariableDeclaration", - "scope": 807, - "src": "9440:27:0", + "scope": 803, + "src": "9412:27:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10625,10 +10587,10 @@ "typeString": "bool" }, "typeName": { - "id": 758, + "id": 754, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9440:4:0", + "src": "9412:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10638,18 +10600,18 @@ "visibility": "internal" } ], - "id": 763, + "id": 759, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 761, + "id": 757, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9487:21:0", + "src": "9459:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10663,18 +10625,18 @@ "typeString": "uint256" } ], - "id": 760, + "id": 756, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "9470:16:0", + "referencedDeclaration": 924, + "src": "9442:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 762, + "id": 758, "isConstant": false, "isLValue": false, "isPure": false, @@ -10682,14 +10644,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9470:39:0", + "src": "9442:39:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9440:69:0" + "src": "9412:69:0" }, { "expression": { @@ -10701,7 +10663,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 769, + "id": 765, "isConstant": false, "isLValue": false, "isPure": false, @@ -10712,19 +10674,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 767, + "id": 763, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 765, + "id": 761, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "9527:15:0", + "referencedDeclaration": 745, + "src": "9499:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10734,18 +10696,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 766, + "id": 762, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "9546:15:0", + "referencedDeclaration": 750, + "src": "9518:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9527:34:0", + "src": "9499:34:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10755,18 +10717,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 768, + "id": 764, "name": "majorityVotingToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 759, - "src": "9565:22:0", + "referencedDeclaration": 755, + "src": "9537:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9527:60:0", + "src": "9499:60:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10775,14 +10737,14 @@ { "argumentTypes": null, "hexValue": "526571756972656420636f6e646974696f6e7320666f7220726566756e6420617265206e6f74206d6574", - "id": 770, + "id": 766, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9589:44:0", + "src": "9561:44:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_1086fb0a245a80bddbec2bbf87c88d8fc142025bee989551e1ac5ccca15d31ff", @@ -10802,21 +10764,21 @@ "typeString": "literal_string \"Required conditions for refund are not met\"" } ], - "id": 764, + "id": 760, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "9519:7:0", + "referencedDeclaration": 1247, + "src": "9491:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 771, + "id": 767, "isConstant": false, "isLValue": false, "isPure": false, @@ -10824,25 +10786,25 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9519:115:0", + "src": "9491:115:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 772, + "id": 768, "nodeType": "ExpressionStatement", - "src": "9519:115:0" + "src": "9491:115:0" }, { "condition": { "argumentTypes": null, - "id": 773, + "id": 769, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "9648:15:0", + "referencedDeclaration": 745, + "src": "9620:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10851,38 +10813,38 @@ "falseBody": { "condition": { "argumentTypes": null, - "id": 780, + "id": 776, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "9745:15:0", + "referencedDeclaration": 750, + "src": "9717:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 792, + "id": 788, "nodeType": "Block", - "src": "9838:78:0", + "src": "9810:78:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 790, + "id": 786, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 787, + "id": 783, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9852:12:0", + "src": "9824:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -10894,18 +10856,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 788, + "id": 784, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9867:12:0", + "src": "9839:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 789, + "id": 785, "isConstant": false, "isLValue": false, "isPure": true, @@ -10913,48 +10875,48 @@ "memberName": "MAJORITY_VOTING_TO_REFUND", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9867:38:0", + "src": "9839:38:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9852:53:0", + "src": "9824:53:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 791, + "id": 787, "nodeType": "ExpressionStatement", - "src": "9852:53:0" + "src": "9824:53:0" } ] }, - "id": 793, + "id": 789, "nodeType": "IfStatement", - "src": "9741:175:0", + "src": "9713:175:0", "trueBody": { - "id": 786, + "id": 782, "nodeType": "Block", - "src": "9762:70:0", + "src": "9734:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 784, + "id": 780, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 781, + "id": 777, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9776:12:0", + "src": "9748:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -10966,18 +10928,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 782, + "id": 778, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9791:12:0", + "src": "9763:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 783, + "id": 779, "isConstant": false, "isLValue": false, "isPure": true, @@ -10985,49 +10947,49 @@ "memberName": "CROWD_FUND_FAILED", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9791:30:0", + "src": "9763:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9776:45:0", + "src": "9748:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 785, + "id": 781, "nodeType": "ExpressionStatement", - "src": "9776:45:0" + "src": "9748:45:0" } ] } }, - "id": 794, + "id": 790, "nodeType": "IfStatement", - "src": "9644:272:0", + "src": "9616:272:0", "trueBody": { - "id": 779, + "id": 775, "nodeType": "Block", - "src": "9665:70:0", + "src": "9637:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 777, + "id": 773, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 774, + "id": 770, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9679:12:0", + "src": "9651:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -11039,18 +11001,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 775, + "id": 771, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9694:12:0", + "src": "9666:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 776, + "id": 772, "isConstant": false, "isLValue": false, "isPure": true, @@ -11058,21 +11020,21 @@ "memberName": "CALLER_IS_TRUSTEE", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9694:30:0", + "src": "9666:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9679:45:0", + "src": "9651:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 778, + "id": 774, "nodeType": "ExpressionStatement", - "src": "9679:45:0" + "src": "9651:45:0" } ] } @@ -11080,19 +11042,19 @@ { "expression": { "argumentTypes": null, - "id": 797, + "id": 793, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 795, + "id": 791, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "9925:6:0", + "src": "9897:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11103,14 +11065,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 796, + "id": 792, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "9934:4:0", + "src": "9906:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -11118,32 +11080,32 @@ }, "value": "true" }, - "src": "9925:13:0", + "src": "9897:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 798, + "id": 794, "nodeType": "ExpressionStatement", - "src": "9925:13:0" + "src": "9897:13:0" }, { "expression": { "argumentTypes": null, - "id": 804, + "id": 800, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 799, + "id": 795, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "9948:13:0", + "src": "9920:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11158,14 +11120,14 @@ "arguments": [ { "argumentTypes": null, - "id": 801, + "id": 797, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1262, - "src": "9972:4:0", + "referencedDeclaration": 1258, + "src": "9944:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } } @@ -11173,24 +11135,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } ], - "id": 800, + "id": 796, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9964:7:0", + "src": "9936:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 802, + "id": 798, "isConstant": false, "isLValue": false, "isPure": false, @@ -11198,13 +11160,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9964:13:0", + "src": "9936:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 803, + "id": 799, "isConstant": false, "isLValue": false, "isPure": false, @@ -11212,76 +11174,76 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9964:21:0", + "src": "9936:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9948:37:0", + "src": "9920:37:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 805, + "id": 801, "nodeType": "ExpressionStatement", - "src": "9948:37:0" + "src": "9920:37:0" } ] }, "documentation": null, - "id": 807, + "id": 803, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 746, + "id": 742, "modifierName": { "argumentTypes": null, - "id": 745, + "id": 741, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "9324:12:0", + "referencedDeclaration": 1027, + "src": "9296:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "9324:12:0" + "src": "9296:12:0" } ], "name": "refund", "nodeType": "FunctionDefinition", "parameters": { - "id": 744, + "id": 740, "nodeType": "ParameterList", "parameters": [], - "src": "9314:2:0" + "src": "9286:2:0" }, "payable": false, "returnParameters": { - "id": 747, + "id": 743, "nodeType": "ParameterList", "parameters": [], - "src": "9337:0:0" + "src": "9309:0:0" }, - "scope": 1080, - "src": "9299:693:0", + "scope": 1076, + "src": "9271:693:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 870, + "id": 866, "nodeType": "Block", - "src": "10127:528:0", + "src": "10099:528:0", "statements": [ { "expression": { @@ -11289,12 +11251,12 @@ "arguments": [ { "argumentTypes": null, - "id": 815, + "id": 811, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "10145:6:0", + "src": "10117:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11303,14 +11265,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 816, + "id": 812, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10153:25:0", + "src": "10125:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -11330,21 +11292,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 814, + "id": 810, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "10137:7:0", + "referencedDeclaration": 1247, + "src": "10109:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 817, + "id": 813, "isConstant": false, "isLValue": false, "isPure": false, @@ -11352,28 +11314,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10137:42:0", + "src": "10109:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 818, + "id": 814, "nodeType": "ExpressionStatement", - "src": "10137:42:0" + "src": "10109:42:0" }, { "assignments": [ - 820 + 816 ], "declarations": [ { "constant": false, - "id": 820, + "id": 816, "name": "isRefunded", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10189:15:0", + "scope": 867, + "src": "10161:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11381,10 +11343,10 @@ "typeString": "bool" }, "typeName": { - "id": 819, + "id": 815, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "10189:4:0", + "src": "10161:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11394,33 +11356,33 @@ "visibility": "internal" } ], - "id": 825, + "id": 821, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 821, + "id": 817, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10207:12:0", + "src": "10179:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 823, + "id": 819, "indexExpression": { "argumentTypes": null, - "id": 822, + "id": 818, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10220:13:0", + "referencedDeclaration": 805, + "src": "10192:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11431,13 +11393,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10207:27:0", + "src": "10179:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 824, + "id": 820, "isConstant": false, "isLValue": true, "isPure": false, @@ -11445,14 +11407,14 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10207:36:0", + "src": "10179:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "10189:54:0" + "src": "10161:54:0" }, { "expression": { @@ -11460,7 +11422,7 @@ "arguments": [ { "argumentTypes": null, - "id": 828, + "id": 824, "isConstant": false, "isLValue": false, "isPure": false, @@ -11468,15 +11430,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10261:11:0", + "src": "10233:11:0", "subExpression": { "argumentTypes": null, - "id": 827, + "id": 823, "name": "isRefunded", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 820, - "src": "10262:10:0", + "referencedDeclaration": 816, + "src": "10234:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11490,14 +11452,14 @@ { "argumentTypes": null, "hexValue": "537065636966696564206164647265737320697320616c726561647920726566756e646564", - "id": 829, + "id": 825, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10274:39:0", + "src": "10246:39:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ad918abf6ea38b3d8dd6fccfc0198c349db0339300085e3846f4b85c44350efa", @@ -11517,21 +11479,21 @@ "typeString": "literal_string \"Specified address is already refunded\"" } ], - "id": 826, + "id": 822, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "10253:7:0", + "referencedDeclaration": 1247, + "src": "10225:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 830, + "id": 826, "isConstant": false, "isLValue": false, "isPure": false, @@ -11539,20 +11501,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10253:61:0", + "src": "10225:61:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 831, + "id": 827, "nodeType": "ExpressionStatement", - "src": "10253:61:0" + "src": "10225:61:0" }, { "expression": { "argumentTypes": null, - "id": 837, + "id": 833, "isConstant": false, "isLValue": false, "isPure": false, @@ -11563,26 +11525,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 832, + "id": 828, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10324:12:0", + "src": "10296:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 834, + "id": 830, "indexExpression": { "argumentTypes": null, - "id": 833, + "id": 829, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10337:13:0", + "referencedDeclaration": 805, + "src": "10309:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11593,13 +11555,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10324:27:0", + "src": "10296:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 835, + "id": 831, "isConstant": false, "isLValue": true, "isPure": false, @@ -11607,7 +11569,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10324:36:0", + "src": "10296:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11618,14 +11580,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 836, + "id": 832, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "10363:4:0", + "src": "10335:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -11633,28 +11595,28 @@ }, "value": "true" }, - "src": "10324:43:0", + "src": "10296:43:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 838, + "id": 834, "nodeType": "ExpressionStatement", - "src": "10324:43:0" + "src": "10296:43:0" }, { "assignments": [ - 840 + 836 ], "declarations": [ { "constant": false, - "id": 840, + "id": 836, "name": "contributionAmount", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10377:23:0", + "scope": 867, + "src": "10349:23:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11662,10 +11624,10 @@ "typeString": "uint256" }, "typeName": { - "id": 839, + "id": 835, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10377:4:0", + "src": "10349:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11675,33 +11637,33 @@ "visibility": "internal" } ], - "id": 845, + "id": 841, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 841, + "id": 837, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10403:12:0", + "src": "10375:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 843, + "id": 839, "indexExpression": { "argumentTypes": null, - "id": 842, + "id": 838, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10416:13:0", + "referencedDeclaration": 805, + "src": "10388:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11712,13 +11674,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10403:27:0", + "src": "10375:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 844, + "id": 840, "isConstant": false, "isLValue": true, "isPure": false, @@ -11726,27 +11688,27 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "10403:46:0", + "src": "10375:46:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10377:72:0" + "src": "10349:72:0" }, { "assignments": [ - 847 + 843 ], "declarations": [ { "constant": false, - "id": 847, + "id": 843, "name": "amountToRefund", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10459:19:0", + "scope": 867, + "src": "10431:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11754,10 +11716,10 @@ "typeString": "uint256" }, "typeName": { - "id": 846, + "id": 842, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10459:4:0", + "src": "10431:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11767,18 +11729,18 @@ "visibility": "internal" } ], - "id": 858, + "id": 854, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 856, + "id": 852, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "10531:13:0", + "src": "10503:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11802,14 +11764,14 @@ "arguments": [ { "argumentTypes": null, - "id": 851, + "id": 847, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1262, - "src": "10512:4:0", + "referencedDeclaration": 1258, + "src": "10484:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } } @@ -11817,24 +11779,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } ], - "id": 850, + "id": 846, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "10504:7:0", + "src": "10476:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 852, + "id": 848, "isConstant": false, "isLValue": false, "isPure": false, @@ -11842,13 +11804,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10504:13:0", + "src": "10476:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 853, + "id": 849, "isConstant": false, "isLValue": false, "isPure": false, @@ -11856,7 +11818,7 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10504:21:0", + "src": "10476:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11872,32 +11834,32 @@ ], "expression": { "argumentTypes": null, - "id": 848, + "id": 844, "name": "contributionAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 840, - "src": "10481:18:0", + "referencedDeclaration": 836, + "src": "10453:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 849, + "id": 845, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1173, - "src": "10481:22:0", + "referencedDeclaration": 1169, + "src": "10453:22:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 854, + "id": 850, "isConstant": false, "isLValue": false, "isPure": false, @@ -11905,27 +11867,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10481:45:0", + "src": "10453:45:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 855, + "id": 851, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "div", "nodeType": "MemberAccess", - "referencedDeclaration": 1187, - "src": "10481:49:0", + "referencedDeclaration": 1183, + "src": "10453:49:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 857, + "id": 853, "isConstant": false, "isLValue": false, "isPure": false, @@ -11933,14 +11895,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10481:64:0", + "src": "10453:64:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10459:86:0" + "src": "10431:86:0" }, { "expression": { @@ -11948,12 +11910,12 @@ "arguments": [ { "argumentTypes": null, - "id": 862, + "id": 858, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "10578:14:0", + "referencedDeclaration": 843, + "src": "10550:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11969,18 +11931,18 @@ ], "expression": { "argumentTypes": null, - "id": 859, + "id": 855, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10555:13:0", + "referencedDeclaration": 805, + "src": "10527:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 861, + "id": 857, "isConstant": false, "isLValue": false, "isPure": false, @@ -11988,13 +11950,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10555:22:0", + "src": "10527:22:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 863, + "id": 859, "isConstant": false, "isLValue": false, "isPure": false, @@ -12002,15 +11964,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10555:38:0", + "src": "10527:38:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 864, + "id": 860, "nodeType": "ExpressionStatement", - "src": "10555:38:0" + "src": "10527:38:0" }, { "eventCall": { @@ -12018,12 +11980,12 @@ "arguments": [ { "argumentTypes": null, - "id": 866, + "id": 862, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10618:13:0", + "referencedDeclaration": 805, + "src": "10590:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12031,12 +11993,12 @@ }, { "argumentTypes": null, - "id": 867, + "id": 863, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "10633:14:0", + "referencedDeclaration": 843, + "src": "10605:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12054,18 +12016,18 @@ "typeString": "uint256" } ], - "id": 865, + "id": 861, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "10608:9:0", + "src": "10580:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 868, + "id": 864, "isConstant": false, "isLValue": false, "isPure": false, @@ -12073,57 +12035,57 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10608:40:0", + "src": "10580:40:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 869, + "id": 865, "nodeType": "EmitStatement", - "src": "10603:45:0" + "src": "10575:45:0" } ] }, "documentation": null, - "id": 871, + "id": 867, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 812, + "id": 808, "modifierName": { "argumentTypes": null, - "id": 811, + "id": 807, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1021, - "src": "10116:10:0", + "referencedDeclaration": 1017, + "src": "10088:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10116:10:0" + "src": "10088:10:0" } ], "name": "withdraw", "nodeType": "FunctionDefinition", "parameters": { - "id": 810, + "id": 806, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 809, + "id": 805, "name": "refundAddress", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10086:21:0", + "scope": 867, + "src": "10058:21:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12131,10 +12093,10 @@ "typeString": "address" }, "typeName": { - "id": 808, + "id": 804, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10086:7:0", + "src": "10058:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12144,45 +12106,45 @@ "visibility": "internal" } ], - "src": "10085:23:0" + "src": "10057:23:0" }, "payable": false, "returnParameters": { - "id": 813, + "id": 809, "nodeType": "ParameterList", "parameters": [], - "src": "10127:0:0" + "src": "10099:0:0" }, - "scope": 1080, - "src": "10068:587:0", + "scope": 1076, + "src": "10040:587:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 912, + "id": 908, "nodeType": "Block", - "src": "10801:322:0", + "src": "10773:322:0", "statements": [ { "body": { - "id": 906, + "id": 902, "nodeType": "Block", - "src": "10861:221:0", + "src": "10833:221:0", "statements": [ { "assignments": [ - 890 + 886 ], "declarations": [ { "constant": false, - "id": 890, + "id": 886, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 913, - "src": "10875:26:0", + "scope": 909, + "src": "10847:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12190,10 +12152,10 @@ "typeString": "address" }, "typeName": { - "id": 889, + "id": 885, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10875:7:0", + "src": "10847:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12203,31 +12165,31 @@ "visibility": "internal" } ], - "id": 894, + "id": 890, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 891, + "id": 887, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10904:15:0", + "src": "10876:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 893, + "id": 889, "indexExpression": { "argumentTypes": null, - "id": 892, + "id": 888, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "10920:1:0", + "referencedDeclaration": 875, + "src": "10892:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12238,19 +12200,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10904:18:0", + "src": "10876:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "10875:47:0" + "src": "10847:47:0" }, { "condition": { "argumentTypes": null, - "id": 899, + "id": 895, "isConstant": false, "isLValue": false, "isPure": false, @@ -12258,33 +12220,33 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10940:42:0", + "src": "10912:42:0", "subExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 895, + "id": 891, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10941:12:0", + "src": "10913:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 897, + "id": 893, "indexExpression": { "argumentTypes": null, - "id": 896, + "id": 892, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 890, - "src": "10954:18:0", + "referencedDeclaration": 886, + "src": "10926:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12295,13 +12257,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10941:32:0", + "src": "10913:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 898, + "id": 894, "isConstant": false, "isLValue": true, "isPure": false, @@ -12309,7 +12271,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10941:41:0", + "src": "10913:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12321,13 +12283,13 @@ } }, "falseBody": null, - "id": 905, + "id": 901, "nodeType": "IfStatement", - "src": "10936:136:0", + "src": "10908:136:0", "trueBody": { - "id": 904, + "id": 900, "nodeType": "Block", - "src": "10984:88:0", + "src": "10956:88:0", "statements": [ { "expression": { @@ -12336,14 +12298,14 @@ { "argumentTypes": null, "hexValue": "4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f742079657420726566756e646564", - "id": 901, + "id": 897, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "11009:47:0", + "src": "10981:47:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_85d231c62370fa6b43ee7ffe2e2243eb8d4631e742e97de3a2558a277a825be1", @@ -12359,21 +12321,21 @@ "typeString": "literal_string \"At least one contributor has not yet refunded\"" } ], - "id": 900, + "id": 896, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1252, - 1253 + 1248, + 1249 ], - "referencedDeclaration": 1253, - "src": "11002:6:0", + "referencedDeclaration": 1249, + "src": "10974:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 902, + "id": 898, "isConstant": false, "isLValue": false, "isPure": false, @@ -12381,15 +12343,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11002:55:0", + "src": "10974:55:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 903, + "id": 899, "nodeType": "ExpressionStatement", - "src": "11002:55:0" + "src": "10974:55:0" } ] } @@ -12402,19 +12364,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 885, + "id": 881, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 882, + "id": 878, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "10828:1:0", + "referencedDeclaration": 875, + "src": "10800:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12426,18 +12388,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 883, + "id": 879, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10832:15:0", + "src": "10804:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 884, + "id": 880, "isConstant": false, "isLValue": true, "isPure": false, @@ -12445,31 +12407,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10832:22:0", + "src": "10804:22:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10828:26:0", + "src": "10800:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 907, + "id": 903, "initializationExpression": { "assignments": [ - 879 + 875 ], "declarations": [ { "constant": false, - "id": 879, + "id": 875, "name": "i", "nodeType": "VariableDeclaration", - "scope": 913, - "src": "10816:6:0", + "scope": 909, + "src": "10788:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12477,10 +12439,10 @@ "typeString": "uint256" }, "typeName": { - "id": 878, + "id": 874, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10816:4:0", + "src": "10788:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12490,18 +12452,18 @@ "visibility": "internal" } ], - "id": 881, + "id": 877, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 880, + "id": 876, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "10825:1:0", + "src": "10797:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -12510,12 +12472,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "10816:10:0" + "src": "10788:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 887, + "id": 883, "isConstant": false, "isLValue": false, "isPure": false, @@ -12523,15 +12485,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "10856:3:0", + "src": "10828:3:0", "subExpression": { "argumentTypes": null, - "id": 886, + "id": 882, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "10856:1:0", + "referencedDeclaration": 875, + "src": "10828:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12542,12 +12504,12 @@ "typeString": "uint256" } }, - "id": 888, + "id": 884, "nodeType": "ExpressionStatement", - "src": "10856:3:0" + "src": "10828:3:0" }, "nodeType": "ForStatement", - "src": "10811:271:0" + "src": "10783:271:0" }, { "expression": { @@ -12555,12 +12517,12 @@ "arguments": [ { "argumentTypes": null, - "id": 909, + "id": 905, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "11104:11:0", + "src": "11076:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12574,18 +12536,18 @@ "typeString": "address" } ], - "id": 908, + "id": 904, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "11091:12:0", + "referencedDeclaration": 1251, + "src": "11063:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 910, + "id": 906, "isConstant": false, "isLValue": false, "isPure": false, @@ -12593,89 +12555,89 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11091:25:0", + "src": "11063:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 911, + "id": 907, "nodeType": "ExpressionStatement", - "src": "11091:25:0" + "src": "11063:25:0" } ] }, "documentation": null, - "id": 913, + "id": 909, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 874, + "id": 870, "modifierName": { "argumentTypes": null, - "id": 873, + "id": 869, "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1079, - "src": "10778:11:0", + "referencedDeclaration": 1075, + "src": "10750:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10778:11:0" + "src": "10750:11:0" }, { "arguments": null, - "id": 876, + "id": 872, "modifierName": { "argumentTypes": null, - "id": 875, + "id": 871, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1021, - "src": "10790:10:0", + "referencedDeclaration": 1017, + "src": "10762:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10790:10:0" + "src": "10762:10:0" } ], "name": "destroy", "nodeType": "FunctionDefinition", "parameters": { - "id": 872, + "id": 868, "nodeType": "ParameterList", "parameters": [], - "src": "10768:2:0" + "src": "10740:2:0" }, "payable": false, "returnParameters": { - "id": 877, + "id": 873, "nodeType": "ParameterList", "parameters": [], - "src": "10801:0:0" + "src": "10773:0:0" }, - "scope": 1080, - "src": "10752:371:0", + "scope": 1076, + "src": "10724:371:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 927, + "id": 923, "nodeType": "Block", - "src": "11200:57:0", + "src": "11172:57:0", "statements": [ { "expression": { @@ -12684,7 +12646,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 925, + "id": 921, "isConstant": false, "isLValue": false, "isPure": false, @@ -12695,14 +12657,14 @@ { "argumentTypes": null, "hexValue": "32", - "id": 922, + "id": 918, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11233:1:0", + "src": "11205:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_2_by_1", @@ -12720,32 +12682,32 @@ ], "expression": { "argumentTypes": null, - "id": 920, + "id": 916, "name": "valueVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 915, - "src": "11217:11:0", + "referencedDeclaration": 911, + "src": "11189:11:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 921, + "id": 917, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1173, - "src": "11217:15:0", + "referencedDeclaration": 1169, + "src": "11189:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 923, + "id": 919, "isConstant": false, "isLValue": false, "isPure": false, @@ -12753,7 +12715,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11217:18:0", + "src": "11189:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12763,32 +12725,32 @@ "operator": ">", "rightExpression": { "argumentTypes": null, - "id": 924, + "id": 920, "name": "amountRaised", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 56, - "src": "11238:12:0", + "src": "11210:12:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11217:33:0", + "src": "11189:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 919, - "id": 926, + "functionReturnParameters": 915, + "id": 922, "nodeType": "Return", - "src": "11210:40:0" + "src": "11182:40:0" } ] }, "documentation": null, - "id": 928, + "id": 924, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -12796,16 +12758,16 @@ "name": "isMajorityVoting", "nodeType": "FunctionDefinition", "parameters": { - "id": 916, + "id": 912, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 915, + "id": 911, "name": "valueVoting", "nodeType": "VariableDeclaration", - "scope": 928, - "src": "11155:16:0", + "scope": 924, + "src": "11127:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12813,10 +12775,10 @@ "typeString": "uint256" }, "typeName": { - "id": 914, + "id": 910, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11155:4:0", + "src": "11127:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12826,20 +12788,20 @@ "visibility": "internal" } ], - "src": "11154:18:0" + "src": "11126:18:0" }, "payable": false, "returnParameters": { - "id": 919, + "id": 915, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 918, + "id": 914, "name": "", "nodeType": "VariableDeclaration", - "scope": 928, - "src": "11194:4:0", + "scope": 924, + "src": "11166:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12847,10 +12809,10 @@ "typeString": "bool" }, "typeName": { - "id": 917, + "id": 913, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11194:4:0", + "src": "11166:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12860,25 +12822,25 @@ "visibility": "internal" } ], - "src": "11193:6:0" + "src": "11165:6:0" }, - "scope": 1080, - "src": "11129:128:0", + "scope": 1076, + "src": "11101:128:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 958, + "id": 954, "nodeType": "Block", - "src": "11317:180:0", + "src": "11289:180:0", "statements": [ { "body": { - "id": 954, + "id": 950, "nodeType": "Block", - "src": "11370:99:0", + "src": "11342:99:0", "statements": [ { "condition": { @@ -12887,7 +12849,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 949, + "id": 945, "isConstant": false, "isLValue": false, "isPure": false, @@ -12896,18 +12858,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 944, + "id": 940, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "11388:3:0", + "referencedDeclaration": 1243, + "src": "11360:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 945, + "id": 941, "isConstant": false, "isLValue": false, "isPure": false, @@ -12915,7 +12877,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11388:10:0", + "src": "11360:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12927,26 +12889,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 946, + "id": 942, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11402:8:0", + "src": "11374:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 948, + "id": 944, "indexExpression": { "argumentTypes": null, - "id": 947, + "id": 943, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "11411:1:0", + "referencedDeclaration": 930, + "src": "11383:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12957,39 +12919,39 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11402:11:0", + "src": "11374:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "11388:25:0", + "src": "11360:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 953, + "id": 949, "nodeType": "IfStatement", - "src": "11384:75:0", + "src": "11356:75:0", "trueBody": { - "id": 952, + "id": 948, "nodeType": "Block", - "src": "11415:44:0", + "src": "11387:44:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 950, + "id": 946, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11440:4:0", + "src": "11412:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -12997,10 +12959,10 @@ }, "value": "true" }, - "functionReturnParameters": 932, - "id": 951, + "functionReturnParameters": 928, + "id": 947, "nodeType": "Return", - "src": "11433:11:0" + "src": "11405:11:0" } ] } @@ -13013,19 +12975,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 940, + "id": 936, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 937, + "id": 933, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "11344:1:0", + "referencedDeclaration": 930, + "src": "11316:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13037,18 +12999,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 938, + "id": 934, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11348:8:0", + "src": "11320:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 939, + "id": 935, "isConstant": false, "isLValue": true, "isPure": false, @@ -13056,31 +13018,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11348:15:0", + "src": "11320:15:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11344:19:0", + "src": "11316:19:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 955, + "id": 951, "initializationExpression": { "assignments": [ - 934 + 930 ], "declarations": [ { "constant": false, - "id": 934, + "id": 930, "name": "i", "nodeType": "VariableDeclaration", - "scope": 959, - "src": "11332:6:0", + "scope": 955, + "src": "11304:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13088,10 +13050,10 @@ "typeString": "uint256" }, "typeName": { - "id": 933, + "id": 929, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11332:4:0", + "src": "11304:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13101,18 +13063,18 @@ "visibility": "internal" } ], - "id": 936, + "id": 932, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 935, + "id": 931, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11341:1:0", + "src": "11313:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -13121,12 +13083,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "11332:10:0" + "src": "11304:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 942, + "id": 938, "isConstant": false, "isLValue": false, "isPure": false, @@ -13134,15 +13096,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "11365:3:0", + "src": "11337:3:0", "subExpression": { "argumentTypes": null, - "id": 941, + "id": 937, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "11365:1:0", + "referencedDeclaration": 930, + "src": "11337:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13153,25 +13115,25 @@ "typeString": "uint256" } }, - "id": 943, + "id": 939, "nodeType": "ExpressionStatement", - "src": "11365:3:0" + "src": "11337:3:0" }, "nodeType": "ForStatement", - "src": "11327:142:0" + "src": "11299:142:0" }, { "expression": { "argumentTypes": null, "hexValue": "66616c7365", - "id": 956, + "id": 952, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11485:5:0", + "src": "11457:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -13179,15 +13141,15 @@ }, "value": "false" }, - "functionReturnParameters": 932, - "id": 957, + "functionReturnParameters": 928, + "id": 953, "nodeType": "Return", - "src": "11478:12:0" + "src": "11450:12:0" } ] }, "documentation": null, - "id": 959, + "id": 955, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13195,23 +13157,23 @@ "name": "isCallerTrustee", "nodeType": "FunctionDefinition", "parameters": { - "id": 929, + "id": 925, "nodeType": "ParameterList", "parameters": [], - "src": "11287:2:0" + "src": "11259:2:0" }, "payable": false, "returnParameters": { - "id": 932, + "id": 928, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 931, + "id": 927, "name": "", "nodeType": "VariableDeclaration", - "scope": 959, - "src": "11311:4:0", + "scope": 955, + "src": "11283:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13219,10 +13181,10 @@ "typeString": "bool" }, "typeName": { - "id": 930, + "id": 926, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11311:4:0", + "src": "11283:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13232,19 +13194,19 @@ "visibility": "internal" } ], - "src": "11310:6:0" + "src": "11282:6:0" }, - "scope": 1080, - "src": "11263:234:0", + "scope": 1076, + "src": "11235:234:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 971, + "id": 967, "nodeType": "Block", - "src": "11550:62:0", + "src": "11522:62:0", "statements": [ { "expression": { @@ -13253,7 +13215,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 969, + "id": 965, "isConstant": false, "isLValue": false, "isPure": false, @@ -13264,19 +13226,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 966, + "id": 962, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 964, + "id": 960, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, - "src": "11567:3:0", + "referencedDeclaration": 1245, + "src": "11539:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13286,18 +13248,18 @@ "operator": ">=", "rightExpression": { "argumentTypes": null, - "id": 965, + "id": 961, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "11574:8:0", + "src": "11546:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11567:15:0", + "src": "11539:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13307,7 +13269,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 968, + "id": 964, "isConstant": false, "isLValue": false, "isPure": false, @@ -13315,15 +13277,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "11586:19:0", + "src": "11558:19:0", "subExpression": { "argumentTypes": null, - "id": 967, + "id": 963, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "11587:18:0", + "src": "11559:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13334,21 +13296,21 @@ "typeString": "bool" } }, - "src": "11567:38:0", + "src": "11539:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 963, - "id": 970, + "functionReturnParameters": 959, + "id": 966, "nodeType": "Return", - "src": "11560:45:0" + "src": "11532:45:0" } ] }, "documentation": null, - "id": 972, + "id": 968, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13356,23 +13318,23 @@ "name": "isFailed", "nodeType": "FunctionDefinition", "parameters": { - "id": 960, + "id": 956, "nodeType": "ParameterList", "parameters": [], - "src": "11520:2:0" + "src": "11492:2:0" }, "payable": false, "returnParameters": { - "id": 963, + "id": 959, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 962, + "id": 958, "name": "", "nodeType": "VariableDeclaration", - "scope": 972, - "src": "11544:4:0", + "scope": 968, + "src": "11516:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13380,10 +13342,10 @@ "typeString": "bool" }, "typeName": { - "id": 961, + "id": 957, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11544:4:0", + "src": "11516:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13393,19 +13355,19 @@ "visibility": "internal" } ], - "src": "11543:6:0" + "src": "11515:6:0" }, - "scope": 1080, - "src": "11503:109:0", + "scope": 1076, + "src": "11475:109:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 988, + "id": 984, "nodeType": "Block", - "src": "11731:90:0", + "src": "11703:90:0", "statements": [ { "expression": { @@ -13416,26 +13378,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 981, + "id": 977, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11749:12:0", + "src": "11721:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 983, + "id": 979, "indexExpression": { "argumentTypes": null, - "id": 982, + "id": 978, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 974, - "src": "11762:18:0", + "referencedDeclaration": 970, + "src": "11734:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13446,13 +13408,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11749:32:0", + "src": "11721:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 984, + "id": 980, "isConstant": false, "isLValue": true, "isPure": false, @@ -13460,21 +13422,21 @@ "memberName": "milestoneNoVotes", "nodeType": "MemberAccess", "referencedDeclaration": 25, - "src": "11749:49:0", + "src": "11721:49:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_bool_$dyn_storage", "typeString": "bool[] storage ref" } }, - "id": 986, + "id": 982, "indexExpression": { "argumentTypes": null, - "id": 985, + "id": 981, "name": "milestoneIndex", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 976, - "src": "11799:14:0", + "referencedDeclaration": 972, + "src": "11771:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13485,21 +13447,21 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11749:65:0", + "src": "11721:65:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 980, - "id": 987, + "functionReturnParameters": 976, + "id": 983, "nodeType": "Return", - "src": "11742:72:0" + "src": "11714:72:0" } ] }, "documentation": null, - "id": 989, + "id": 985, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13507,16 +13469,16 @@ "name": "getContributorMilestoneVote", "nodeType": "FunctionDefinition", "parameters": { - "id": 977, + "id": 973, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 974, + "id": 970, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 989, - "src": "11655:26:0", + "scope": 985, + "src": "11627:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13524,10 +13486,10 @@ "typeString": "address" }, "typeName": { - "id": 973, + "id": 969, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11655:7:0", + "src": "11627:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13538,11 +13500,11 @@ }, { "constant": false, - "id": 976, + "id": 972, "name": "milestoneIndex", "nodeType": "VariableDeclaration", - "scope": 989, - "src": "11683:19:0", + "scope": 985, + "src": "11655:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13550,10 +13512,10 @@ "typeString": "uint256" }, "typeName": { - "id": 975, + "id": 971, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11683:4:0", + "src": "11655:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13563,20 +13525,20 @@ "visibility": "internal" } ], - "src": "11654:49:0" + "src": "11626:49:0" }, "payable": false, "returnParameters": { - "id": 980, + "id": 976, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 979, + "id": 975, "name": "", "nodeType": "VariableDeclaration", - "scope": 989, - "src": "11725:4:0", + "scope": 985, + "src": "11697:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13584,10 +13546,10 @@ "typeString": "bool" }, "typeName": { - "id": 978, + "id": 974, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11725:4:0", + "src": "11697:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13597,19 +13559,19 @@ "visibility": "internal" } ], - "src": "11724:6:0" + "src": "11696:6:0" }, - "scope": 1080, - "src": "11618:203:0", + "scope": 1076, + "src": "11590:203:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1001, + "id": 997, "nodeType": "Block", - "src": "11924:75:0", + "src": "11896:75:0", "statements": [ { "expression": { @@ -13618,26 +13580,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 996, + "id": 992, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11941:12:0", + "src": "11913:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 998, + "id": 994, "indexExpression": { "argumentTypes": null, - "id": 997, + "id": 993, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "11954:18:0", + "referencedDeclaration": 987, + "src": "11926:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13648,13 +13610,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11941:32:0", + "src": "11913:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 999, + "id": 995, "isConstant": false, "isLValue": true, "isPure": false, @@ -13662,21 +13624,21 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "11941:51:0", + "src": "11913:51:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 995, - "id": 1000, + "functionReturnParameters": 991, + "id": 996, "nodeType": "Return", - "src": "11934:58:0" + "src": "11906:58:0" } ] }, "documentation": null, - "id": 1002, + "id": 998, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13684,16 +13646,16 @@ "name": "getContributorContributionAmount", "nodeType": "FunctionDefinition", "parameters": { - "id": 992, + "id": 988, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 991, + "id": 987, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 1002, - "src": "11869:26:0", + "scope": 998, + "src": "11841:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13701,10 +13663,10 @@ "typeString": "address" }, "typeName": { - "id": 990, + "id": 986, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11869:7:0", + "src": "11841:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13714,20 +13676,20 @@ "visibility": "internal" } ], - "src": "11868:28:0" + "src": "11840:28:0" }, "payable": false, "returnParameters": { - "id": 995, + "id": 991, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 994, + "id": 990, "name": "", "nodeType": "VariableDeclaration", - "scope": 1002, - "src": "11918:4:0", + "scope": 998, + "src": "11890:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13735,10 +13697,10 @@ "typeString": "uint256" }, "typeName": { - "id": 993, + "id": 989, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11918:4:0", + "src": "11890:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13748,19 +13710,19 @@ "visibility": "internal" } ], - "src": "11917:6:0" + "src": "11889:6:0" }, - "scope": 1080, - "src": "11827:172:0", + "scope": 1076, + "src": "11799:172:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1011, + "id": 1007, "nodeType": "Block", - "src": "12059:42:0", + "src": "12031:42:0", "statements": [ { "expression": { @@ -13768,12 +13730,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1008, + "id": 1004, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "12081:12:0", + "src": "12053:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -13787,20 +13749,20 @@ "typeString": "enum CrowdFund.FreezeReason" } ], - "id": 1007, + "id": 1003, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "12076:4:0", + "src": "12048:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint" }, - "id": 1009, + "id": 1005, "isConstant": false, "isLValue": false, "isPure": false, @@ -13808,21 +13770,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12076:18:0", + "src": "12048:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 1006, - "id": 1010, + "functionReturnParameters": 1002, + "id": 1006, "nodeType": "Return", - "src": "12069:25:0" + "src": "12041:25:0" } ] }, "documentation": null, - "id": 1012, + "id": 1008, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13830,23 +13792,23 @@ "name": "getFreezeReason", "nodeType": "FunctionDefinition", "parameters": { - "id": 1003, + "id": 999, "nodeType": "ParameterList", "parameters": [], - "src": "12029:2:0" + "src": "12001:2:0" }, "payable": false, "returnParameters": { - "id": 1006, + "id": 1002, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1005, + "id": 1001, "name": "", "nodeType": "VariableDeclaration", - "scope": 1012, - "src": "12053:4:0", + "scope": 1008, + "src": "12025:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13854,10 +13816,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1004, + "id": 1000, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "12053:4:0", + "src": "12025:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13867,19 +13829,19 @@ "visibility": "internal" } ], - "src": "12052:6:0" + "src": "12024:6:0" }, - "scope": 1080, - "src": "12005:96:0", + "scope": 1076, + "src": "11977:96:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1020, + "id": 1016, "nodeType": "Block", - "src": "12129:70:0", + "src": "12101:70:0", "statements": [ { "expression": { @@ -13887,12 +13849,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1015, + "id": 1011, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12147:6:0", + "src": "12119:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13901,14 +13863,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 1016, + "id": 1012, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12155:25:0", + "src": "12127:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -13928,21 +13890,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 1014, + "id": 1010, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12139:7:0", + "referencedDeclaration": 1247, + "src": "12111:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1017, + "id": 1013, "isConstant": false, "isLValue": false, "isPure": false, @@ -13950,41 +13912,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12139:42:0", + "src": "12111:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1018, + "id": 1014, "nodeType": "ExpressionStatement", - "src": "12139:42:0" + "src": "12111:42:0" }, { - "id": 1019, + "id": 1015, "nodeType": "PlaceholderStatement", - "src": "12191:1:0" + "src": "12163:1:0" } ] }, "documentation": null, - "id": 1021, + "id": 1017, "name": "onlyFrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1013, + "id": 1009, "nodeType": "ParameterList", "parameters": [], - "src": "12126:2:0" + "src": "12098:2:0" }, - "src": "12107:92:0", + "src": "12079:92:0", "visibility": "internal" }, { "body": { - "id": 1030, + "id": 1026, "nodeType": "Block", - "src": "12229:67:0", + "src": "12201:67:0", "statements": [ { "expression": { @@ -13992,7 +13954,7 @@ "arguments": [ { "argumentTypes": null, - "id": 1025, + "id": 1021, "isConstant": false, "isLValue": false, "isPure": false, @@ -14000,15 +13962,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12247:7:0", + "src": "12219:7:0", "subExpression": { "argumentTypes": null, - "id": 1024, + "id": 1020, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12248:6:0", + "src": "12220:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14022,14 +13984,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e642069732066726f7a656e", - "id": 1026, + "id": 1022, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12256:21:0", + "src": "12228:21:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_21ebfed987d130de5e469bef5346c6c759f8769c3909e5f178aa85e98366503d", @@ -14049,21 +14011,21 @@ "typeString": "literal_string \"CrowdFund is frozen\"" } ], - "id": 1023, + "id": 1019, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12239:7:0", + "referencedDeclaration": 1247, + "src": "12211:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1027, + "id": 1023, "isConstant": false, "isLValue": false, "isPure": false, @@ -14071,41 +14033,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12239:39:0", + "src": "12211:39:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1028, + "id": 1024, "nodeType": "ExpressionStatement", - "src": "12239:39:0" + "src": "12211:39:0" }, { - "id": 1029, + "id": 1025, "nodeType": "PlaceholderStatement", - "src": "12288:1:0" + "src": "12260:1:0" } ] }, "documentation": null, - "id": 1031, + "id": 1027, "name": "onlyUnfrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1022, + "id": 1018, "nodeType": "ParameterList", "parameters": [], - "src": "12226:2:0" + "src": "12198:2:0" }, - "src": "12205:91:0", + "src": "12177:91:0", "visibility": "internal" }, { "body": { - "id": 1039, + "id": 1035, "nodeType": "Block", - "src": "12324:84:0", + "src": "12296:84:0", "statements": [ { "expression": { @@ -14113,12 +14075,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1034, + "id": 1030, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12342:18:0", + "src": "12314:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14127,14 +14089,14 @@ { "argumentTypes": null, "hexValue": "526169736520676f616c206973206e6f742072656163686564", - "id": 1035, + "id": 1031, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12362:27:0", + "src": "12334:27:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_d65d4721f73624ca6e381e7ad4c000f40a20c0abe88c0be62360bb906d10ffbe", @@ -14154,21 +14116,21 @@ "typeString": "literal_string \"Raise goal is not reached\"" } ], - "id": 1033, + "id": 1029, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12334:7:0", + "referencedDeclaration": 1247, + "src": "12306:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1036, + "id": 1032, "isConstant": false, "isLValue": false, "isPure": false, @@ -14176,41 +14138,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12334:56:0", + "src": "12306:56:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1037, + "id": 1033, "nodeType": "ExpressionStatement", - "src": "12334:56:0" + "src": "12306:56:0" }, { - "id": 1038, + "id": 1034, "nodeType": "PlaceholderStatement", - "src": "12400:1:0" + "src": "12372:1:0" } ] }, "documentation": null, - "id": 1040, + "id": 1036, "name": "onlyRaised", "nodeType": "ModifierDefinition", "parameters": { - "id": 1032, + "id": 1028, "nodeType": "ParameterList", "parameters": [], - "src": "12321:2:0" + "src": "12293:2:0" }, - "src": "12302:106:0", + "src": "12274:106:0", "visibility": "internal" }, { "body": { - "id": 1053, + "id": 1049, "nodeType": "Block", - "src": "12437:103:0", + "src": "12409:103:0", "statements": [ { "expression": { @@ -14222,7 +14184,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 1048, + "id": 1044, "isConstant": false, "isLValue": false, "isPure": false, @@ -14233,19 +14195,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1045, + "id": 1041, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 1043, + "id": 1039, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, - "src": "12455:3:0", + "referencedDeclaration": 1245, + "src": "12427:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14255,18 +14217,18 @@ "operator": "<=", "rightExpression": { "argumentTypes": null, - "id": 1044, + "id": 1040, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "12462:8:0", + "src": "12434:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12455:15:0", + "src": "12427:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14276,7 +14238,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 1047, + "id": 1043, "isConstant": false, "isLValue": false, "isPure": false, @@ -14284,15 +14246,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12474:19:0", + "src": "12446:19:0", "subExpression": { "argumentTypes": null, - "id": 1046, + "id": 1042, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12475:18:0", + "src": "12447:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14303,7 +14265,7 @@ "typeString": "bool" } }, - "src": "12455:38:0", + "src": "12427:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14312,14 +14274,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f74206f6e676f696e67", - "id": 1049, + "id": 1045, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12495:26:0", + "src": "12467:26:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_843cc2d7a1ba19041b40561b89d21c7571d29e5c5e2d0d1510f441aea3fc1747", @@ -14339,21 +14301,21 @@ "typeString": "literal_string \"CrowdFund is not ongoing\"" } ], - "id": 1042, + "id": 1038, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12447:7:0", + "referencedDeclaration": 1247, + "src": "12419:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1050, + "id": 1046, "isConstant": false, "isLValue": false, "isPure": false, @@ -14361,41 +14323,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12447:75:0", + "src": "12419:75:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1051, + "id": 1047, "nodeType": "ExpressionStatement", - "src": "12447:75:0" + "src": "12419:75:0" }, { - "id": 1052, + "id": 1048, "nodeType": "PlaceholderStatement", - "src": "12532:1:0" + "src": "12504:1:0" } ] }, "documentation": null, - "id": 1054, + "id": 1050, "name": "onlyOnGoing", "nodeType": "ModifierDefinition", "parameters": { - "id": 1041, + "id": 1037, "nodeType": "ParameterList", "parameters": [], - "src": "12434:2:0" + "src": "12406:2:0" }, - "src": "12414:126:0", + "src": "12386:126:0", "visibility": "internal" }, { "body": { - "id": 1068, + "id": 1064, "nodeType": "Block", - "src": "12573:116:0", + "src": "12545:116:0", "statements": [ { "expression": { @@ -14407,7 +14369,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1063, + "id": 1059, "isConstant": false, "isLValue": false, "isPure": false, @@ -14418,34 +14380,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 1057, + "id": 1053, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "12591:12:0", + "src": "12563:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 1060, + "id": 1056, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1058, + "id": 1054, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "12604:3:0", + "referencedDeclaration": 1243, + "src": "12576:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1059, + "id": 1055, "isConstant": false, "isLValue": false, "isPure": false, @@ -14453,7 +14415,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12604:10:0", + "src": "12576:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14464,13 +14426,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12591:24:0", + "src": "12563:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 1061, + "id": 1057, "isConstant": false, "isLValue": true, "isPure": false, @@ -14478,7 +14440,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "12591:43:0", + "src": "12563:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14489,14 +14451,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 1062, + "id": 1058, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "12638:1:0", + "src": "12610:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -14504,7 +14466,7 @@ }, "value": "0" }, - "src": "12591:48:0", + "src": "12563:48:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14513,14 +14475,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f74206120636f6e7472696275746f72", - "id": 1064, + "id": 1060, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12641:29:0", + "src": "12613:29:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_27c7012fc5b199883f3d6c1e7d0d3c9cd967752b2ed8ba1703713f2d84425e7b", @@ -14540,21 +14502,21 @@ "typeString": "literal_string \"Caller is not a contributor\"" } ], - "id": 1056, + "id": 1052, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12583:7:0", + "referencedDeclaration": 1247, + "src": "12555:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1065, + "id": 1061, "isConstant": false, "isLValue": false, "isPure": false, @@ -14562,41 +14524,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12583:88:0", + "src": "12555:88:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1066, + "id": 1062, "nodeType": "ExpressionStatement", - "src": "12583:88:0" + "src": "12555:88:0" }, { - "id": 1067, + "id": 1063, "nodeType": "PlaceholderStatement", - "src": "12681:1:0" + "src": "12653:1:0" } ] }, "documentation": null, - "id": 1069, + "id": 1065, "name": "onlyContributor", "nodeType": "ModifierDefinition", "parameters": { - "id": 1055, + "id": 1051, "nodeType": "ParameterList", "parameters": [], - "src": "12570:2:0" + "src": "12542:2:0" }, - "src": "12546:143:0", + "src": "12518:143:0", "visibility": "internal" }, { "body": { - "id": 1078, + "id": 1074, "nodeType": "Block", - "src": "12718:81:0", + "src": "12690:81:0", "statements": [ { "expression": { @@ -14607,18 +14569,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 1072, + "id": 1068, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 959, - "src": "12736:15:0", + "referencedDeclaration": 955, + "src": "12708:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 1073, + "id": 1069, "isConstant": false, "isLValue": false, "isPure": false, @@ -14626,7 +14588,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12736:17:0", + "src": "12708:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14635,14 +14597,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f7420612074727573746565", - "id": 1074, + "id": 1070, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12755:25:0", + "src": "12727:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_efecdf3be8b72bfbf67a07f441dfdb20b968592ad6d7fba48a91dfa72a34f2d8", @@ -14662,21 +14624,21 @@ "typeString": "literal_string \"Caller is not a trustee\"" } ], - "id": 1071, + "id": 1067, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12728:7:0", + "referencedDeclaration": 1247, + "src": "12700:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1075, + "id": 1071, "isConstant": false, "isLValue": false, "isPure": false, @@ -14684,51 +14646,51 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12728:53:0", + "src": "12700:53:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1076, + "id": 1072, "nodeType": "ExpressionStatement", - "src": "12728:53:0" + "src": "12700:53:0" }, { - "id": 1077, + "id": 1073, "nodeType": "PlaceholderStatement", - "src": "12791:1:0" + "src": "12763:1:0" } ] }, "documentation": null, - "id": 1079, + "id": 1075, "name": "onlyTrustee", "nodeType": "ModifierDefinition", "parameters": { - "id": 1070, + "id": 1066, "nodeType": "ParameterList", "parameters": [], - "src": "12715:2:0" + "src": "12687:2:0" }, - "src": "12695:104:0", + "src": "12667:104:0", "visibility": "internal" } ], - "scope": 1081, - "src": "87:12715:0" + "scope": 1077, + "src": "87:12687:0" } ], - "src": "0:12802:0" + "src": "0:12775:0" }, "legacyAST": { - "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", "exportedSymbols": { "CrowdFund": [ - 1080 + 1076 ] }, - "id": 1081, + "id": 1077, "nodeType": "SourceUnit", "nodes": [ { @@ -14747,8 +14709,8 @@ "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", "id": 2, "nodeType": "ImportDirective", - "scope": 1081, - "sourceUnit": 1233, + "scope": 1077, + "sourceUnit": 1229, "src": "25:59:0", "symbolAliases": [], "unitAlias": "" @@ -14759,9 +14721,9 @@ "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1080, + "id": 1076, "linearizedBaseContracts": [ - 1080 + 1076 ], "name": "CrowdFund", "nodeType": "ContractDefinition", @@ -14773,10 +14735,10 @@ "id": 3, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1232, + "referencedDeclaration": 1228, "src": "118:8:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1232", + "typeIdentifier": "t_contract$_SafeMath_$1228", "typeString": "library SafeMath" } }, @@ -14825,7 +14787,7 @@ "id": 11, "name": "freezeReason", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "264:25:0", "stateVariable": true, "storageLocation": "default", @@ -14959,7 +14921,7 @@ ], "name": "Milestone", "nodeType": "StructDefinition", - "scope": 1080, + "scope": 1076, "src": "296:144:0", "visibility": "public" }, @@ -15084,7 +15046,7 @@ ], "name": "Contributor", "nodeType": "StructDefinition", - "scope": 1080, + "scope": 1076, "src": "446:197:0", "visibility": "public" }, @@ -15231,7 +15193,7 @@ "id": 44, "name": "frozen", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "776:18:0", "stateVariable": true, "storageLocation": "default", @@ -15257,7 +15219,7 @@ "id": 46, "name": "isRaiseGoalReached", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "800:30:0", "stateVariable": true, "storageLocation": "default", @@ -15283,7 +15245,7 @@ "id": 48, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "836:41:0", "stateVariable": true, "storageLocation": "default", @@ -15309,7 +15271,7 @@ "id": 50, "name": "milestoneVotingPeriod", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "883:33:0", "stateVariable": true, "storageLocation": "default", @@ -15335,7 +15297,7 @@ "id": 52, "name": "deadline", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "922:20:0", "stateVariable": true, "storageLocation": "default", @@ -15361,7 +15323,7 @@ "id": 54, "name": "raiseGoal", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "948:21:0", "stateVariable": true, "storageLocation": "default", @@ -15387,7 +15349,7 @@ "id": 56, "name": "amountRaised", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "975:24:0", "stateVariable": true, "storageLocation": "default", @@ -15413,7 +15375,7 @@ "id": 58, "name": "frozenBalance", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1005:25:0", "stateVariable": true, "storageLocation": "default", @@ -15439,7 +15401,7 @@ "id": 60, "name": "minimumContributionAmount", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1036:37:0", "stateVariable": true, "storageLocation": "default", @@ -15465,7 +15427,7 @@ "id": 62, "name": "amountVotingForRefund", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1079:33:0", "stateVariable": true, "storageLocation": "default", @@ -15491,7 +15453,7 @@ "id": 64, "name": "beneficiary", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1118:26:0", "stateVariable": true, "storageLocation": "default", @@ -15517,7 +15479,7 @@ "id": 68, "name": "contributors", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1150:51:0", "stateVariable": true, "storageLocation": "default", @@ -15564,7 +15526,7 @@ "id": 71, "name": "contributorList", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1207:32:0", "stateVariable": true, "storageLocation": "default", @@ -15600,7 +15562,7 @@ "id": 74, "name": "trustees", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1302:25:0", "stateVariable": true, "storageLocation": "default", @@ -15636,7 +15598,7 @@ "id": 77, "name": "milestones", "nodeType": "VariableDeclaration", - "scope": 1080, + "scope": 1076, "src": "1401:29:0", "stateVariable": true, "storageLocation": "default", @@ -15763,10 +15725,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "1689:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -15980,10 +15942,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "1767:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -16197,10 +16159,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "1894:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -16449,10 +16411,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "2338:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -16544,7 +16506,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "2440:18:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -16973,10 +16935,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "2713:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -17230,7 +17192,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "3026:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -17790,7 +17752,7 @@ "parameters": [], "src": "1679:0:0" }, - "scope": 1080, + "scope": 1076, "src": "1437:1931:0", "stateMutability": "nonpayable", "superFunction": null, @@ -17846,7 +17808,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "3521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -17895,7 +17857,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "3504:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -18002,10 +17964,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "3541:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -18082,7 +18044,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4076:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18291,10 +18253,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "4186:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -18357,7 +18319,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4393:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18468,7 +18430,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4776:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18527,7 +18489,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4857:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18582,7 +18544,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4822:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18635,7 +18597,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "4809:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -18708,7 +18670,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4457:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18753,7 +18715,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18951,7 +18913,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "4713:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -19195,7 +19157,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "5033:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -19224,7 +19186,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "5045:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -19303,7 +19265,7 @@ "name": "onlyOnGoing", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1054, + "referencedDeclaration": 1050, "src": "3411:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -19322,7 +19284,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, + "referencedDeclaration": 1027, "src": "3423:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -19348,7 +19310,7 @@ "parameters": [], "src": "3436:0:0" }, - "scope": 1080, + "scope": 1076, "src": "3374:1688:0", "stateMutability": "payable", "superFunction": null, @@ -19560,7 +19522,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "5301:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -19680,7 +19642,7 @@ "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, + "referencedDeclaration": 924, "src": "5343:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", @@ -19771,10 +19733,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "5460:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -20341,10 +20303,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "5721:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -20636,7 +20598,7 @@ "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1173, + "referencedDeclaration": 1169, "src": "6660:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -20671,7 +20633,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "6652:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -20685,7 +20647,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "6652:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -20911,7 +20873,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "6326:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -20925,7 +20887,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1231, + "referencedDeclaration": 1227, "src": "6326:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -21083,7 +21045,7 @@ "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1079, + "referencedDeclaration": 1075, "src": "5120:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -21102,7 +21064,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1040, + "referencedDeclaration": 1036, "src": "5132:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -21121,7 +21083,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, + "referencedDeclaration": 1027, "src": "5143:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -21174,7 +21136,7 @@ "parameters": [], "src": "5156:0:0" }, - "scope": 1080, + "scope": 1076, "src": "5068:1638:0", "stateMutability": "nonpayable", "superFunction": null, @@ -21182,9 +21144,9 @@ }, { "body": { - "id": 591, + "id": 589, "nodeType": "Block", - "src": "6811:940:0", + "src": "6811:930:0", "statements": [ { "assignments": [ @@ -21196,7 +21158,7 @@ "id": 494, "name": "existingMilestoneNoVote", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "6821:28:0", "stateVariable": false, "storageLocation": "default", @@ -21247,7 +21209,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "6865:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -21404,10 +21366,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "6910:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -21442,7 +21404,7 @@ "id": 511, "name": "milestoneVotingStarted", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "7017:27:0", "stateVariable": false, "storageLocation": "default", @@ -21571,7 +21533,7 @@ "id": 520, "name": "votePeriodHasEnded", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "7104:23:0", "stateVariable": false, "storageLocation": "default", @@ -21669,7 +21631,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, + "referencedDeclaration": 1245, "src": "7177:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -21695,7 +21657,7 @@ "id": 529, "name": "onGoingVote", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "7190:16:0", "stateVariable": false, "storageLocation": "default", @@ -21833,10 +21795,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, + "referencedDeclaration": 1247, "src": "7264:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -21897,7 +21859,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "7340:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -22024,277 +21986,258 @@ } }, "falseBody": { - "condition": { - "argumentTypes": null, - "id": 570, - "name": "vote", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 484, - "src": "7576:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 589, - "nodeType": "IfStatement", - "src": "7572:173:0", - "trueBody": { - "id": 588, - "nodeType": "Block", - "src": "7582:163:0", - "statements": [ - { - "expression": { + "id": 587, + "nodeType": "Block", + "src": "7572:163:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { "argumentTypes": null, - "id": 586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { + "expression": { "argumentTypes": null, - "expression": { + "baseExpression": { "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 571, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7596:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 573, - "indexExpression": { - "argumentTypes": null, - "id": 572, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7607:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7596:17:0", + "id": 570, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7586:10:0", "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 572, + "indexExpression": { + "argumentTypes": null, + "id": 571, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7597:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" } }, - "id": 574, "isConstant": false, "isLValue": true, "isPure": false, - "lValueRequested": true, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7596:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 580, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "7690:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 583, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 581, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "7703:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 582, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7703:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7690:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 584, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "7690:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 575, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7642:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 577, - "indexExpression": { - "argumentTypes": null, - "id": 576, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7653:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7642:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" - } - }, - "id": 578, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7642:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1231, - "src": "7642:47:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7642:92:0", + "nodeType": "IndexAccess", + "src": "7586:17:0", "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" } }, - "src": "7596:138:0", + "id": 573, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7586:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 587, - "nodeType": "ExpressionStatement", - "src": "7596:138:0" - } - ] - } + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 579, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "7680:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 582, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 580, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1243, + "src": "7693:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 581, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7693:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7680:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 583, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "7680:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 574, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7632:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 576, + "indexExpression": { + "argumentTypes": null, + "id": 575, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7643:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7632:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" + } + }, + "id": 577, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7632:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 578, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 1227, + "src": "7632:47:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 584, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7632:92:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7586:138:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 586, + "nodeType": "ExpressionStatement", + "src": "7586:138:0" + } + ] }, - "id": 590, + "id": 588, "nodeType": "IfStatement", - "src": "7392:353:0", + "src": "7392:343:0", "trueBody": { "id": 569, "nodeType": "Block", @@ -22395,7 +22338,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, + "referencedDeclaration": 1243, "src": "7524:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -22512,7 +22455,7 @@ "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1207, + "referencedDeclaration": 1203, "src": "7463:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -22549,7 +22492,7 @@ ] }, "documentation": null, - "id": 592, + "id": 590, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -22563,7 +22506,7 @@ "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1069, + "referencedDeclaration": 1065, "src": "6771:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -22582,7 +22525,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1040, + "referencedDeclaration": 1036, "src": "6787:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -22601,7 +22544,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, + "referencedDeclaration": 1027, "src": "6798:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -22623,7 +22566,7 @@ "id": 482, "name": "index", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "6741:10:0", "stateVariable": false, "storageLocation": "default", @@ -22649,7 +22592,7 @@ "id": 484, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 592, + "scope": 590, "src": "6753:9:0", "stateVariable": false, "storageLocation": "default", @@ -22680,30 +22623,30 @@ "parameters": [], "src": "6811:0:0" }, - "scope": 1080, - "src": "6712:1039:0", + "scope": 1076, + "src": "6712:1029:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 678, + "id": 676, "nodeType": "Block", - "src": "7828:890:0", + "src": "7818:890:0", "statements": [ { "assignments": [ - 602 + 600 ], "declarations": [ { "constant": false, - "id": 602, + "id": 600, "name": "voteDeadlineHasPassed", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "7838:26:0", + "scope": 677, + "src": "7828:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22711,10 +22654,10 @@ "typeString": "bool" }, "typeName": { - "id": 601, + "id": 599, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7838:4:0", + "src": "7828:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22724,14 +22667,14 @@ "visibility": "internal" } ], - "id": 609, + "id": 607, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 608, + "id": 606, "isConstant": false, "isLValue": false, "isPure": false, @@ -22742,26 +22685,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 603, + "id": 601, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7867:10:0", + "src": "7857:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 605, + "id": 603, "indexExpression": { "argumentTypes": null, - "id": 604, + "id": 602, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "7878:5:0", + "referencedDeclaration": 592, + "src": "7868:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22772,13 +22715,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7867:17:0", + "src": "7857:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 606, + "id": 604, "isConstant": false, "isLValue": true, "isPure": false, @@ -22786,7 +22729,7 @@ "memberName": "payoutRequestVoteDeadline", "nodeType": "MemberAccess", "referencedDeclaration": 17, - "src": "7867:43:0", + "src": "7857:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22796,38 +22739,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 607, + "id": 605, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, - "src": "7913:3:0", + "referencedDeclaration": 1245, + "src": "7903:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7867:49:0", + "src": "7857:49:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7838:78:0" + "src": "7828:78:0" }, { "assignments": [ - 611 + 609 ], "declarations": [ { "constant": false, - "id": 611, + "id": 609, "name": "majorityVotedNo", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "7926:20:0", + "scope": 677, + "src": "7916:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22835,10 +22778,10 @@ "typeString": "bool" }, "typeName": { - "id": 610, + "id": 608, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7926:4:0", + "src": "7916:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22848,7 +22791,7 @@ "visibility": "internal" } ], - "id": 618, + "id": 616, "initialValue": { "argumentTypes": null, "arguments": [ @@ -22858,26 +22801,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 613, + "id": 611, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7966:10:0", + "src": "7956:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 615, + "id": 613, "indexExpression": { "argumentTypes": null, - "id": 614, + "id": 612, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "7977:5:0", + "referencedDeclaration": 592, + "src": "7967:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22888,13 +22831,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7966:17:0", + "src": "7956:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 616, + "id": 614, "isConstant": false, "isLValue": true, "isPure": false, @@ -22902,7 +22845,7 @@ "memberName": "amountVotingAgainstPayout", "nodeType": "MemberAccess", "referencedDeclaration": 15, - "src": "7966:43:0", + "src": "7956:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22916,18 +22859,18 @@ "typeString": "uint256" } ], - "id": 612, + "id": 610, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "7949:16:0", + "referencedDeclaration": 924, + "src": "7939:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 617, + "id": 615, "isConstant": false, "isLValue": false, "isPure": false, @@ -22935,27 +22878,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7949:61:0", + "src": "7939:61:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7926:84:0" + "src": "7916:84:0" }, { "assignments": [ - 620 + 618 ], "declarations": [ { "constant": false, - "id": 620, + "id": 618, "name": "milestoneAlreadyPaid", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "8020:25:0", + "scope": 677, + "src": "8010:25:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22963,10 +22906,10 @@ "typeString": "bool" }, "typeName": { - "id": 619, + "id": 617, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8020:4:0", + "src": "8010:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22976,33 +22919,33 @@ "visibility": "internal" } ], - "id": 625, + "id": 623, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 621, + "id": 619, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8048:10:0", + "src": "8038:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 623, + "id": 621, "indexExpression": { "argumentTypes": null, - "id": 622, + "id": 620, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8059:5:0", + "referencedDeclaration": 592, + "src": "8049:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23013,13 +22956,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8048:17:0", + "src": "8038:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 624, + "id": 622, "isConstant": false, "isLValue": true, "isPure": false, @@ -23027,14 +22970,14 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8048:22:0", + "src": "8038:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8020:50:0" + "src": "8010:50:0" }, { "condition": { @@ -23043,7 +22986,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 632, + "id": 630, "isConstant": false, "isLValue": false, "isPure": false, @@ -23054,19 +22997,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 629, + "id": 627, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 626, + "id": 624, "name": "voteDeadlineHasPassed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 602, - "src": "8084:21:0", + "referencedDeclaration": 600, + "src": "8074:21:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23076,7 +23019,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 628, + "id": 626, "isConstant": false, "isLValue": false, "isPure": false, @@ -23084,15 +23027,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8109:16:0", + "src": "8099:16:0", "subExpression": { "argumentTypes": null, - "id": 627, + "id": 625, "name": "majorityVotedNo", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 611, - "src": "8110:15:0", + "referencedDeclaration": 609, + "src": "8100:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23103,7 +23046,7 @@ "typeString": "bool" } }, - "src": "8084:41:0", + "src": "8074:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23113,7 +23056,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 631, + "id": 629, "isConstant": false, "isLValue": false, "isPure": false, @@ -23121,15 +23064,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8129:21:0", + "src": "8119:21:0", "subExpression": { "argumentTypes": null, - "id": 630, + "id": 628, "name": "milestoneAlreadyPaid", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 620, - "src": "8130:20:0", + "referencedDeclaration": 618, + "src": "8120:20:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23140,16 +23083,16 @@ "typeString": "bool" } }, - "src": "8084:66:0", + "src": "8074:66:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 676, + "id": 674, "nodeType": "Block", - "src": "8639:73:0", + "src": "8629:73:0", "statements": [ { "expression": { @@ -23158,14 +23101,14 @@ { "argumentTypes": null, "hexValue": "726571756972656420636f6e646974696f6e732077657265206e6f7420736174697366696564", - "id": 673, + "id": 671, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8660:40:0", + "src": "8650:40:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c944a403407a4b450cdf033de02e1e093564ed6120fdd470c5daee653f2d6a87", @@ -23181,21 +23124,21 @@ "typeString": "literal_string \"required conditions were not satisfied\"" } ], - "id": 672, + "id": 670, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1252, - 1253 + 1248, + 1249 ], - "referencedDeclaration": 1253, - "src": "8653:6:0", + "referencedDeclaration": 1249, + "src": "8643:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 674, + "id": 672, "isConstant": false, "isLValue": false, "isPure": false, @@ -23203,30 +23146,30 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8653:48:0", + "src": "8643:48:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 675, + "id": 673, "nodeType": "ExpressionStatement", - "src": "8653:48:0" + "src": "8643:48:0" } ] }, - "id": 677, + "id": 675, "nodeType": "IfStatement", - "src": "8080:632:0", + "src": "8070:632:0", "trueBody": { - "id": 671, + "id": 669, "nodeType": "Block", - "src": "8152:481:0", + "src": "8142:481:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 638, + "id": 636, "isConstant": false, "isLValue": false, "isPure": false, @@ -23237,26 +23180,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 633, + "id": 631, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8166:10:0", + "src": "8156:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 635, + "id": 633, "indexExpression": { "argumentTypes": null, - "id": 634, + "id": 632, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8177:5:0", + "referencedDeclaration": 592, + "src": "8167:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23267,13 +23210,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8166:17:0", + "src": "8156:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 636, + "id": 634, "isConstant": false, "isLValue": true, "isPure": false, @@ -23281,7 +23224,7 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8166:22:0", + "src": "8156:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23292,14 +23235,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 637, + "id": 635, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8191:4:0", + "src": "8181:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -23307,28 +23250,28 @@ }, "value": "true" }, - "src": "8166:29:0", + "src": "8156:29:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 639, + "id": 637, "nodeType": "ExpressionStatement", - "src": "8166:29:0" + "src": "8156:29:0" }, { "assignments": [ - 641 + 639 ], "declarations": [ { "constant": false, - "id": 641, + "id": 639, "name": "amount", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "8209:11:0", + "scope": 677, + "src": "8199:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23336,10 +23279,10 @@ "typeString": "uint256" }, "typeName": { - "id": 640, + "id": 638, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "8209:4:0", + "src": "8199:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23349,33 +23292,33 @@ "visibility": "internal" } ], - "id": 646, + "id": 644, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 642, + "id": 640, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8223:10:0", + "src": "8213:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 644, + "id": 642, "indexExpression": { "argumentTypes": null, - "id": 643, + "id": 641, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8234:5:0", + "referencedDeclaration": 592, + "src": "8224:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23386,13 +23329,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8223:17:0", + "src": "8213:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 645, + "id": 643, "isConstant": false, "isLValue": true, "isPure": false, @@ -23400,14 +23343,14 @@ "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 13, - "src": "8223:24:0", + "src": "8213:24:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "8209:38:0" + "src": "8199:38:0" }, { "expression": { @@ -23415,12 +23358,12 @@ "arguments": [ { "argumentTypes": null, - "id": 650, + "id": 648, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "8282:6:0", + "referencedDeclaration": 639, + "src": "8272:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23436,18 +23379,18 @@ ], "expression": { "argumentTypes": null, - "id": 647, + "id": 645, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8261:11:0", + "src": "8251:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 649, + "id": 647, "isConstant": false, "isLValue": false, "isPure": false, @@ -23455,13 +23398,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8261:20:0", + "src": "8251:20:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 651, + "id": 649, "isConstant": false, "isLValue": false, "isPure": false, @@ -23469,15 +23412,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8261:28:0", + "src": "8251:28:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 652, + "id": 650, "nodeType": "ExpressionStatement", - "src": "8261:28:0" + "src": "8251:28:0" }, { "eventCall": { @@ -23485,12 +23428,12 @@ "arguments": [ { "argumentTypes": null, - "id": 654, + "id": 652, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8318:11:0", + "src": "8308:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23498,12 +23441,12 @@ }, { "argumentTypes": null, - "id": 655, + "id": 653, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 641, - "src": "8331:6:0", + "referencedDeclaration": 639, + "src": "8321:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23521,18 +23464,18 @@ "typeString": "uint256" } ], - "id": 653, + "id": 651, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "8308:9:0", + "src": "8298:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 656, + "id": 654, "isConstant": false, "isLValue": false, "isPure": false, @@ -23540,15 +23483,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8308:30:0", + "src": "8298:30:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 657, + "id": 655, "nodeType": "EmitStatement", - "src": "8303:35:0" + "src": "8293:35:0" }, { "condition": { @@ -23557,7 +23500,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 664, + "id": 662, "isConstant": false, "isLValue": false, "isPure": false, @@ -23567,12 +23510,12 @@ "arguments": [ { "argumentTypes": null, - "id": 661, + "id": 659, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 594, - "src": "8430:5:0", + "referencedDeclaration": 592, + "src": "8420:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23590,18 +23533,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 658, + "id": 656, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8408:10:0", + "src": "8398:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 659, + "id": 657, "isConstant": false, "isLValue": true, "isPure": false, @@ -23609,27 +23552,27 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8408:17:0", + "src": "8398:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 660, + "id": 658, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1207, - "src": "8408:21:0", + "referencedDeclaration": 1203, + "src": "8398:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 662, + "id": 660, "isConstant": false, "isLValue": false, "isPure": false, @@ -23637,7 +23580,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8408:28:0", + "src": "8398:28:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23648,14 +23591,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 663, + "id": 661, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8440:1:0", + "src": "8430:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -23663,20 +23606,20 @@ }, "value": "1" }, - "src": "8408:33:0", + "src": "8398:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 670, + "id": 668, "nodeType": "IfStatement", - "src": "8404:219:0", + "src": "8394:219:0", "trueBody": { - "id": 669, + "id": 667, "nodeType": "Block", - "src": "8443:180:0", + "src": "8433:180:0", "statements": [ { "expression": { @@ -23684,12 +23627,12 @@ "arguments": [ { "argumentTypes": null, - "id": 666, + "id": 664, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8596:11:0", + "src": "8586:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23703,18 +23646,18 @@ "typeString": "address" } ], - "id": 665, + "id": 663, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "8583:12:0", + "referencedDeclaration": 1251, + "src": "8573:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 667, + "id": 665, "isConstant": false, "isLValue": false, "isPure": false, @@ -23722,15 +23665,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8583:25:0", + "src": "8573:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 668, + "id": 666, "nodeType": "ExpressionStatement", - "src": "8583:25:0" + "src": "8573:25:0" } ] } @@ -23741,63 +23684,63 @@ ] }, "documentation": null, - "id": 679, + "id": 677, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ + { + "arguments": null, + "id": 595, + "modifierName": { + "argumentTypes": null, + "id": 594, + "name": "onlyRaised", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1036, + "src": "7794:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7794:10:0" + }, { "arguments": null, "id": 597, "modifierName": { "argumentTypes": null, "id": 596, - "name": "onlyRaised", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1040, - "src": "7804:10:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "7804:10:0" - }, - { - "arguments": null, - "id": 599, - "modifierName": { - "argumentTypes": null, - "id": 598, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "7815:12:0", + "referencedDeclaration": 1027, + "src": "7805:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "7815:12:0" + "src": "7805:12:0" } ], "name": "payMilestonePayout", "nodeType": "FunctionDefinition", "parameters": { - "id": 595, + "id": 593, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 594, + "id": 592, "name": "index", "nodeType": "VariableDeclaration", - "scope": 679, - "src": "7785:10:0", + "scope": 677, + "src": "7775:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23805,10 +23748,10 @@ "typeString": "uint256" }, "typeName": { - "id": 593, + "id": 591, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "7785:4:0", + "src": "7775:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23818,39 +23761,39 @@ "visibility": "internal" } ], - "src": "7784:12:0" + "src": "7774:12:0" }, "payable": false, "returnParameters": { - "id": 600, + "id": 598, "nodeType": "ParameterList", "parameters": [], - "src": "7828:0:0" + "src": "7818:0:0" }, - "scope": 1080, - "src": "7757:961:0", + "scope": 1076, + "src": "7747:961:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 742, + "id": 738, "nodeType": "Block", - "src": "8802:491:0", + "src": "8792:473:0", "statements": [ { "assignments": [ - 691 + 689 ], "declarations": [ { "constant": false, - "id": 691, + "id": 689, "name": "refundVote", "nodeType": "VariableDeclaration", - "scope": 743, - "src": "8812:15:0", + "scope": 739, + "src": "8802:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23858,10 +23801,10 @@ "typeString": "bool" }, "typeName": { - "id": 690, + "id": 688, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8812:4:0", + "src": "8802:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23871,41 +23814,41 @@ "visibility": "internal" } ], - "id": 697, + "id": 695, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 692, + "id": 690, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8830:12:0", + "src": "8820:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 695, + "id": 693, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 693, + "id": 691, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "8843:3:0", + "referencedDeclaration": 1243, + "src": "8833:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 694, + "id": 692, "isConstant": false, "isLValue": false, "isPure": false, @@ -23913,7 +23856,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8843:10:0", + "src": "8833:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23924,13 +23867,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8830:24:0", + "src": "8820:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 696, + "id": 694, "isConstant": false, "isLValue": true, "isPure": false, @@ -23938,14 +23881,14 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8830:35:0", + "src": "8820:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8812:53:0" + "src": "8802:53:0" }, { "expression": { @@ -23957,19 +23900,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 701, + "id": 699, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 699, + "id": 697, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "8883:4:0", + "referencedDeclaration": 679, + "src": "8873:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23979,18 +23922,18 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 700, + "id": 698, "name": "refundVote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 691, - "src": "8891:10:0", + "referencedDeclaration": 689, + "src": "8881:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8883:18:0", + "src": "8873:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23999,14 +23942,14 @@ { "argumentTypes": null, "hexValue": "4578697374696e6720766f7465207374617465206973206964656e746963616c20746f20766f74652076616c7565", - "id": 702, + "id": 700, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8903:48:0", + "src": "8893:48:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_83d9b841f406ef52e32942228e28c13fcdb47e5fa9512f22f335b7955cb71cb5", @@ -24026,21 +23969,21 @@ "typeString": "literal_string \"Existing vote state is identical to vote value\"" } ], - "id": 698, + "id": 696, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "8875:7:0", + "referencedDeclaration": 1247, + "src": "8865:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 703, + "id": 701, "isConstant": false, "isLValue": false, "isPure": false, @@ -24048,20 +23991,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8875:77:0", + "src": "8865:77:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 704, + "id": 702, "nodeType": "ExpressionStatement", - "src": "8875:77:0" + "src": "8865:77:0" }, { "expression": { "argumentTypes": null, - "id": 711, + "id": 709, "isConstant": false, "isLValue": false, "isPure": false, @@ -24072,34 +24015,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 705, + "id": 703, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8962:12:0", + "src": "8952:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 708, + "id": 706, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 706, + "id": 704, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "8975:3:0", + "referencedDeclaration": 1243, + "src": "8965:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 707, + "id": 705, "isConstant": false, "isLValue": false, "isPure": false, @@ -24107,7 +24050,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8975:10:0", + "src": "8965:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24118,13 +24061,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8962:24:0", + "src": "8952:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 709, + "id": 707, "isConstant": false, "isLValue": true, "isPure": false, @@ -24132,7 +24075,7 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8962:35:0", + "src": "8952:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24142,31 +24085,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 710, + "id": 708, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "9000:4:0", + "referencedDeclaration": 679, + "src": "8990:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8962:42:0", + "src": "8952:42:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 712, + "id": 710, "nodeType": "ExpressionStatement", - "src": "8962:42:0" + "src": "8952:42:0" }, { "condition": { "argumentTypes": null, - "id": 714, + "id": 712, "isConstant": false, "isLValue": false, "isPure": false, @@ -24174,15 +24117,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "9018:5:0", + "src": "9008:5:0", "subExpression": { "argumentTypes": null, - "id": 713, + "id": 711, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "9019:4:0", + "referencedDeclaration": 679, + "src": "9009:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24194,212 +24137,26 @@ } }, "falseBody": { - "condition": { - "argumentTypes": null, - "id": 727, - "name": "vote", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 681, - "src": "9162:4:0", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "falseBody": null, - "id": 740, - "nodeType": "IfStatement", - "src": "9158:129:0", - "trueBody": { - "id": 739, - "nodeType": "Block", - "src": "9168:119:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 737, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "argumentTypes": null, - "id": 728, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9182:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 731, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "9232:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 734, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 732, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "9245:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 733, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9245:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9232:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 735, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "9232:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 729, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9206:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1231, - "src": "9206:25:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 736, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9206:70:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "9182:94:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 738, - "nodeType": "ExpressionStatement", - "src": "9182:94:0" - } - ] - } - }, - "id": 741, - "nodeType": "IfStatement", - "src": "9014:273:0", - "trueBody": { - "id": 726, + "id": 736, "nodeType": "Block", - "src": "9025:119:0", + "src": "9140:119:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 724, + "id": 734, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 715, + "id": 725, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9039:21:0", + "src": "9154:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24416,34 +24173,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 718, + "id": 728, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "9089:12:0", + "src": "9204:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 721, + "id": 731, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 719, + "id": 729, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "9102:3:0", + "referencedDeclaration": 1243, + "src": "9217:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 720, + "id": 730, "isConstant": false, "isLValue": false, "isPure": false, @@ -24451,7 +24208,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9102:10:0", + "src": "9217:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24462,13 +24219,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "9089:24:0", + "src": "9204:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 722, + "id": 732, "isConstant": false, "isLValue": true, "isPure": false, @@ -24476,7 +24233,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "9089:43:0", + "src": "9204:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24492,32 +24249,32 @@ ], "expression": { "argumentTypes": null, - "id": 716, + "id": 726, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9063:21:0", + "src": "9178:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 717, + "id": 727, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, - "memberName": "sub", + "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1207, - "src": "9063:25:0", + "referencedDeclaration": 1227, + "src": "9178:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 723, + "id": 733, "isConstant": false, "isLValue": false, "isPure": false, @@ -24525,21 +24282,188 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9063:70:0", + "src": "9178:70:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9039:94:0", + "src": "9154:94:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 725, + "id": 735, "nodeType": "ExpressionStatement", - "src": "9039:94:0" + "src": "9154:94:0" + } + ] + }, + "id": 737, + "nodeType": "IfStatement", + "src": "9004:255:0", + "trueBody": { + "id": 724, + "nodeType": "Block", + "src": "9015:119:0", + "statements": [ + { + "expression": { + "argumentTypes": null, + "id": 722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "argumentTypes": null, + "id": 713, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9029:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 716, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "9079:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 719, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 717, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1243, + "src": "9092:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9092:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9079:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 720, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "9079:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 714, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9053:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sub", + "nodeType": "MemberAccess", + "referencedDeclaration": 1203, + "src": "9053:25:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9053:70:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9029:94:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 723, + "nodeType": "ExpressionStatement", + "src": "9029:94:0" } ] } @@ -24547,29 +24471,48 @@ ] }, "documentation": null, - "id": 743, + "id": 739, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 684, + "id": 682, "modifierName": { "argumentTypes": null, - "id": 683, + "id": 681, "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1069, - "src": "8762:15:0", + "referencedDeclaration": 1065, + "src": "8752:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8762:15:0" + "src": "8752:15:0" + }, + { + "arguments": null, + "id": 684, + "modifierName": { + "argumentTypes": null, + "id": 683, + "name": "onlyRaised", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1036, + "src": "8768:10:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8768:10:0" }, { "arguments": null, @@ -24577,52 +24520,33 @@ "modifierName": { "argumentTypes": null, "id": 685, - "name": "onlyRaised", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1040, - "src": "8778:10:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "8778:10:0" - }, - { - "arguments": null, - "id": 688, - "modifierName": { - "argumentTypes": null, - "id": 687, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "8789:12:0", + "referencedDeclaration": 1027, + "src": "8779:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8789:12:0" + "src": "8779:12:0" } ], "name": "voteRefund", "nodeType": "FunctionDefinition", "parameters": { - "id": 682, + "id": 680, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 681, + "id": 679, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 743, - "src": "8744:9:0", + "scope": 739, + "src": "8734:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24630,10 +24554,10 @@ "typeString": "bool" }, "typeName": { - "id": 680, + "id": 678, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8744:4:0", + "src": "8734:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24643,39 +24567,39 @@ "visibility": "internal" } ], - "src": "8743:11:0" + "src": "8733:11:0" }, "payable": false, "returnParameters": { - "id": 689, + "id": 687, "nodeType": "ParameterList", "parameters": [], - "src": "8802:0:0" + "src": "8792:0:0" }, - "scope": 1080, - "src": "8724:569:0", + "scope": 1076, + "src": "8714:551:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 806, + "id": 802, "nodeType": "Block", - "src": "9337:655:0", + "src": "9309:655:0", "statements": [ { "assignments": [ - 749 + 745 ], "declarations": [ { "constant": false, - "id": 749, + "id": 745, "name": "callerIsTrustee", "nodeType": "VariableDeclaration", - "scope": 807, - "src": "9347:20:0", + "scope": 803, + "src": "9319:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24683,10 +24607,10 @@ "typeString": "bool" }, "typeName": { - "id": 748, + "id": 744, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9347:4:0", + "src": "9319:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24696,24 +24620,24 @@ "visibility": "internal" } ], - "id": 752, + "id": 748, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 750, + "id": 746, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 959, - "src": "9370:15:0", + "referencedDeclaration": 955, + "src": "9342:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 751, + "id": 747, "isConstant": false, "isLValue": false, "isPure": false, @@ -24721,27 +24645,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9370:17:0", + "src": "9342:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9347:40:0" + "src": "9319:40:0" }, { "assignments": [ - 754 + 750 ], "declarations": [ { "constant": false, - "id": 754, + "id": 750, "name": "crowdFundFailed", "nodeType": "VariableDeclaration", - "scope": 807, - "src": "9397:20:0", + "scope": 803, + "src": "9369:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24749,10 +24673,10 @@ "typeString": "bool" }, "typeName": { - "id": 753, + "id": 749, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9397:4:0", + "src": "9369:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24762,24 +24686,24 @@ "visibility": "internal" } ], - "id": 757, + "id": 753, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 755, + "id": 751, "name": "isFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "9420:8:0", + "referencedDeclaration": 968, + "src": "9392:8:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 756, + "id": 752, "isConstant": false, "isLValue": false, "isPure": false, @@ -24787,27 +24711,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9420:10:0", + "src": "9392:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9397:33:0" + "src": "9369:33:0" }, { "assignments": [ - 759 + 755 ], "declarations": [ { "constant": false, - "id": 759, + "id": 755, "name": "majorityVotingToRefund", "nodeType": "VariableDeclaration", - "scope": 807, - "src": "9440:27:0", + "scope": 803, + "src": "9412:27:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24815,10 +24739,10 @@ "typeString": "bool" }, "typeName": { - "id": 758, + "id": 754, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9440:4:0", + "src": "9412:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24828,18 +24752,18 @@ "visibility": "internal" } ], - "id": 763, + "id": 759, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 761, + "id": 757, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9487:21:0", + "src": "9459:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24853,18 +24777,18 @@ "typeString": "uint256" } ], - "id": 760, + "id": 756, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 928, - "src": "9470:16:0", + "referencedDeclaration": 924, + "src": "9442:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 762, + "id": 758, "isConstant": false, "isLValue": false, "isPure": false, @@ -24872,14 +24796,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9470:39:0", + "src": "9442:39:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9440:69:0" + "src": "9412:69:0" }, { "expression": { @@ -24891,7 +24815,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 769, + "id": 765, "isConstant": false, "isLValue": false, "isPure": false, @@ -24902,19 +24826,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 767, + "id": 763, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 765, + "id": 761, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "9527:15:0", + "referencedDeclaration": 745, + "src": "9499:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24924,18 +24848,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 766, + "id": 762, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "9546:15:0", + "referencedDeclaration": 750, + "src": "9518:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9527:34:0", + "src": "9499:34:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24945,18 +24869,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 768, + "id": 764, "name": "majorityVotingToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 759, - "src": "9565:22:0", + "referencedDeclaration": 755, + "src": "9537:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9527:60:0", + "src": "9499:60:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24965,14 +24889,14 @@ { "argumentTypes": null, "hexValue": "526571756972656420636f6e646974696f6e7320666f7220726566756e6420617265206e6f74206d6574", - "id": 770, + "id": 766, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9589:44:0", + "src": "9561:44:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_1086fb0a245a80bddbec2bbf87c88d8fc142025bee989551e1ac5ccca15d31ff", @@ -24992,21 +24916,21 @@ "typeString": "literal_string \"Required conditions for refund are not met\"" } ], - "id": 764, + "id": 760, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "9519:7:0", + "referencedDeclaration": 1247, + "src": "9491:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 771, + "id": 767, "isConstant": false, "isLValue": false, "isPure": false, @@ -25014,25 +24938,25 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9519:115:0", + "src": "9491:115:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 772, + "id": 768, "nodeType": "ExpressionStatement", - "src": "9519:115:0" + "src": "9491:115:0" }, { "condition": { "argumentTypes": null, - "id": 773, + "id": 769, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 749, - "src": "9648:15:0", + "referencedDeclaration": 745, + "src": "9620:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25041,38 +24965,38 @@ "falseBody": { "condition": { "argumentTypes": null, - "id": 780, + "id": 776, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 754, - "src": "9745:15:0", + "referencedDeclaration": 750, + "src": "9717:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 792, + "id": 788, "nodeType": "Block", - "src": "9838:78:0", + "src": "9810:78:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 790, + "id": 786, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 787, + "id": 783, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9852:12:0", + "src": "9824:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -25084,18 +25008,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 788, + "id": 784, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9867:12:0", + "src": "9839:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 789, + "id": 785, "isConstant": false, "isLValue": false, "isPure": true, @@ -25103,48 +25027,48 @@ "memberName": "MAJORITY_VOTING_TO_REFUND", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9867:38:0", + "src": "9839:38:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9852:53:0", + "src": "9824:53:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 791, + "id": 787, "nodeType": "ExpressionStatement", - "src": "9852:53:0" + "src": "9824:53:0" } ] }, - "id": 793, + "id": 789, "nodeType": "IfStatement", - "src": "9741:175:0", + "src": "9713:175:0", "trueBody": { - "id": 786, + "id": 782, "nodeType": "Block", - "src": "9762:70:0", + "src": "9734:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 784, + "id": 780, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 781, + "id": 777, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9776:12:0", + "src": "9748:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -25156,18 +25080,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 782, + "id": 778, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9791:12:0", + "src": "9763:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 783, + "id": 779, "isConstant": false, "isLValue": false, "isPure": true, @@ -25175,49 +25099,49 @@ "memberName": "CROWD_FUND_FAILED", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9791:30:0", + "src": "9763:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9776:45:0", + "src": "9748:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 785, + "id": 781, "nodeType": "ExpressionStatement", - "src": "9776:45:0" + "src": "9748:45:0" } ] } }, - "id": 794, + "id": 790, "nodeType": "IfStatement", - "src": "9644:272:0", + "src": "9616:272:0", "trueBody": { - "id": 779, + "id": 775, "nodeType": "Block", - "src": "9665:70:0", + "src": "9637:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 777, + "id": 773, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 774, + "id": 770, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9679:12:0", + "src": "9651:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -25229,18 +25153,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 775, + "id": 771, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9694:12:0", + "src": "9666:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 776, + "id": 772, "isConstant": false, "isLValue": false, "isPure": true, @@ -25248,21 +25172,21 @@ "memberName": "CALLER_IS_TRUSTEE", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9694:30:0", + "src": "9666:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9679:45:0", + "src": "9651:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 778, + "id": 774, "nodeType": "ExpressionStatement", - "src": "9679:45:0" + "src": "9651:45:0" } ] } @@ -25270,19 +25194,19 @@ { "expression": { "argumentTypes": null, - "id": 797, + "id": 793, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 795, + "id": 791, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "9925:6:0", + "src": "9897:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25293,14 +25217,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 796, + "id": 792, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "9934:4:0", + "src": "9906:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -25308,32 +25232,32 @@ }, "value": "true" }, - "src": "9925:13:0", + "src": "9897:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 798, + "id": 794, "nodeType": "ExpressionStatement", - "src": "9925:13:0" + "src": "9897:13:0" }, { "expression": { "argumentTypes": null, - "id": 804, + "id": 800, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 799, + "id": 795, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "9948:13:0", + "src": "9920:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25348,14 +25272,14 @@ "arguments": [ { "argumentTypes": null, - "id": 801, + "id": 797, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1262, - "src": "9972:4:0", + "referencedDeclaration": 1258, + "src": "9944:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } } @@ -25363,24 +25287,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } ], - "id": 800, + "id": 796, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9964:7:0", + "src": "9936:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 802, + "id": 798, "isConstant": false, "isLValue": false, "isPure": false, @@ -25388,13 +25312,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9964:13:0", + "src": "9936:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 803, + "id": 799, "isConstant": false, "isLValue": false, "isPure": false, @@ -25402,76 +25326,76 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9964:21:0", + "src": "9936:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9948:37:0", + "src": "9920:37:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 805, + "id": 801, "nodeType": "ExpressionStatement", - "src": "9948:37:0" + "src": "9920:37:0" } ] }, "documentation": null, - "id": 807, + "id": 803, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 746, + "id": 742, "modifierName": { "argumentTypes": null, - "id": 745, + "id": 741, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1031, - "src": "9324:12:0", + "referencedDeclaration": 1027, + "src": "9296:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "9324:12:0" + "src": "9296:12:0" } ], "name": "refund", "nodeType": "FunctionDefinition", "parameters": { - "id": 744, + "id": 740, "nodeType": "ParameterList", "parameters": [], - "src": "9314:2:0" + "src": "9286:2:0" }, "payable": false, "returnParameters": { - "id": 747, + "id": 743, "nodeType": "ParameterList", "parameters": [], - "src": "9337:0:0" + "src": "9309:0:0" }, - "scope": 1080, - "src": "9299:693:0", + "scope": 1076, + "src": "9271:693:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 870, + "id": 866, "nodeType": "Block", - "src": "10127:528:0", + "src": "10099:528:0", "statements": [ { "expression": { @@ -25479,12 +25403,12 @@ "arguments": [ { "argumentTypes": null, - "id": 815, + "id": 811, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "10145:6:0", + "src": "10117:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25493,14 +25417,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 816, + "id": 812, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10153:25:0", + "src": "10125:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -25520,21 +25444,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 814, + "id": 810, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "10137:7:0", + "referencedDeclaration": 1247, + "src": "10109:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 817, + "id": 813, "isConstant": false, "isLValue": false, "isPure": false, @@ -25542,28 +25466,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10137:42:0", + "src": "10109:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 818, + "id": 814, "nodeType": "ExpressionStatement", - "src": "10137:42:0" + "src": "10109:42:0" }, { "assignments": [ - 820 + 816 ], "declarations": [ { "constant": false, - "id": 820, + "id": 816, "name": "isRefunded", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10189:15:0", + "scope": 867, + "src": "10161:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -25571,10 +25495,10 @@ "typeString": "bool" }, "typeName": { - "id": 819, + "id": 815, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "10189:4:0", + "src": "10161:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25584,33 +25508,33 @@ "visibility": "internal" } ], - "id": 825, + "id": 821, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 821, + "id": 817, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10207:12:0", + "src": "10179:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 823, + "id": 819, "indexExpression": { "argumentTypes": null, - "id": 822, + "id": 818, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10220:13:0", + "referencedDeclaration": 805, + "src": "10192:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -25621,13 +25545,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10207:27:0", + "src": "10179:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 824, + "id": 820, "isConstant": false, "isLValue": true, "isPure": false, @@ -25635,14 +25559,14 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10207:36:0", + "src": "10179:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "10189:54:0" + "src": "10161:54:0" }, { "expression": { @@ -25650,7 +25574,7 @@ "arguments": [ { "argumentTypes": null, - "id": 828, + "id": 824, "isConstant": false, "isLValue": false, "isPure": false, @@ -25658,15 +25582,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10261:11:0", + "src": "10233:11:0", "subExpression": { "argumentTypes": null, - "id": 827, + "id": 823, "name": "isRefunded", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 820, - "src": "10262:10:0", + "referencedDeclaration": 816, + "src": "10234:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25680,14 +25604,14 @@ { "argumentTypes": null, "hexValue": "537065636966696564206164647265737320697320616c726561647920726566756e646564", - "id": 829, + "id": 825, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10274:39:0", + "src": "10246:39:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ad918abf6ea38b3d8dd6fccfc0198c349db0339300085e3846f4b85c44350efa", @@ -25707,21 +25631,21 @@ "typeString": "literal_string \"Specified address is already refunded\"" } ], - "id": 826, + "id": 822, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "10253:7:0", + "referencedDeclaration": 1247, + "src": "10225:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 830, + "id": 826, "isConstant": false, "isLValue": false, "isPure": false, @@ -25729,20 +25653,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10253:61:0", + "src": "10225:61:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 831, + "id": 827, "nodeType": "ExpressionStatement", - "src": "10253:61:0" + "src": "10225:61:0" }, { "expression": { "argumentTypes": null, - "id": 837, + "id": 833, "isConstant": false, "isLValue": false, "isPure": false, @@ -25753,26 +25677,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 832, + "id": 828, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10324:12:0", + "src": "10296:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 834, + "id": 830, "indexExpression": { "argumentTypes": null, - "id": 833, + "id": 829, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10337:13:0", + "referencedDeclaration": 805, + "src": "10309:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -25783,13 +25707,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10324:27:0", + "src": "10296:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 835, + "id": 831, "isConstant": false, "isLValue": true, "isPure": false, @@ -25797,7 +25721,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10324:36:0", + "src": "10296:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25808,14 +25732,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 836, + "id": 832, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "10363:4:0", + "src": "10335:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -25823,28 +25747,28 @@ }, "value": "true" }, - "src": "10324:43:0", + "src": "10296:43:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 838, + "id": 834, "nodeType": "ExpressionStatement", - "src": "10324:43:0" + "src": "10296:43:0" }, { "assignments": [ - 840 + 836 ], "declarations": [ { "constant": false, - "id": 840, + "id": 836, "name": "contributionAmount", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10377:23:0", + "scope": 867, + "src": "10349:23:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -25852,10 +25776,10 @@ "typeString": "uint256" }, "typeName": { - "id": 839, + "id": 835, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10377:4:0", + "src": "10349:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25865,33 +25789,33 @@ "visibility": "internal" } ], - "id": 845, + "id": 841, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 841, + "id": 837, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10403:12:0", + "src": "10375:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 843, + "id": 839, "indexExpression": { "argumentTypes": null, - "id": 842, + "id": 838, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10416:13:0", + "referencedDeclaration": 805, + "src": "10388:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -25902,13 +25826,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10403:27:0", + "src": "10375:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 844, + "id": 840, "isConstant": false, "isLValue": true, "isPure": false, @@ -25916,27 +25840,27 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "10403:46:0", + "src": "10375:46:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10377:72:0" + "src": "10349:72:0" }, { "assignments": [ - 847 + 843 ], "declarations": [ { "constant": false, - "id": 847, + "id": 843, "name": "amountToRefund", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10459:19:0", + "scope": 867, + "src": "10431:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -25944,10 +25868,10 @@ "typeString": "uint256" }, "typeName": { - "id": 846, + "id": 842, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10459:4:0", + "src": "10431:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25957,18 +25881,18 @@ "visibility": "internal" } ], - "id": 858, + "id": 854, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 856, + "id": 852, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "10531:13:0", + "src": "10503:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25992,14 +25916,14 @@ "arguments": [ { "argumentTypes": null, - "id": 851, + "id": 847, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1262, - "src": "10512:4:0", + "referencedDeclaration": 1258, + "src": "10484:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } } @@ -26007,24 +25931,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } ], - "id": 850, + "id": 846, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "10504:7:0", + "src": "10476:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 852, + "id": 848, "isConstant": false, "isLValue": false, "isPure": false, @@ -26032,13 +25956,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10504:13:0", + "src": "10476:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 853, + "id": 849, "isConstant": false, "isLValue": false, "isPure": false, @@ -26046,7 +25970,7 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10504:21:0", + "src": "10476:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26062,32 +25986,32 @@ ], "expression": { "argumentTypes": null, - "id": 848, + "id": 844, "name": "contributionAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 840, - "src": "10481:18:0", + "referencedDeclaration": 836, + "src": "10453:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 849, + "id": 845, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1173, - "src": "10481:22:0", + "referencedDeclaration": 1169, + "src": "10453:22:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 854, + "id": 850, "isConstant": false, "isLValue": false, "isPure": false, @@ -26095,27 +26019,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10481:45:0", + "src": "10453:45:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 855, + "id": 851, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "div", "nodeType": "MemberAccess", - "referencedDeclaration": 1187, - "src": "10481:49:0", + "referencedDeclaration": 1183, + "src": "10453:49:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 857, + "id": 853, "isConstant": false, "isLValue": false, "isPure": false, @@ -26123,14 +26047,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10481:64:0", + "src": "10453:64:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10459:86:0" + "src": "10431:86:0" }, { "expression": { @@ -26138,12 +26062,12 @@ "arguments": [ { "argumentTypes": null, - "id": 862, + "id": 858, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "10578:14:0", + "referencedDeclaration": 843, + "src": "10550:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26159,18 +26083,18 @@ ], "expression": { "argumentTypes": null, - "id": 859, + "id": 855, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10555:13:0", + "referencedDeclaration": 805, + "src": "10527:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 861, + "id": 857, "isConstant": false, "isLValue": false, "isPure": false, @@ -26178,13 +26102,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10555:22:0", + "src": "10527:22:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 863, + "id": 859, "isConstant": false, "isLValue": false, "isPure": false, @@ -26192,15 +26116,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10555:38:0", + "src": "10527:38:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 864, + "id": 860, "nodeType": "ExpressionStatement", - "src": "10555:38:0" + "src": "10527:38:0" }, { "eventCall": { @@ -26208,12 +26132,12 @@ "arguments": [ { "argumentTypes": null, - "id": 866, + "id": 862, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 809, - "src": "10618:13:0", + "referencedDeclaration": 805, + "src": "10590:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26221,12 +26145,12 @@ }, { "argumentTypes": null, - "id": 867, + "id": 863, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 847, - "src": "10633:14:0", + "referencedDeclaration": 843, + "src": "10605:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26244,18 +26168,18 @@ "typeString": "uint256" } ], - "id": 865, + "id": 861, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "10608:9:0", + "src": "10580:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 868, + "id": 864, "isConstant": false, "isLValue": false, "isPure": false, @@ -26263,57 +26187,57 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10608:40:0", + "src": "10580:40:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 869, + "id": 865, "nodeType": "EmitStatement", - "src": "10603:45:0" + "src": "10575:45:0" } ] }, "documentation": null, - "id": 871, + "id": 867, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 812, + "id": 808, "modifierName": { "argumentTypes": null, - "id": 811, + "id": 807, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1021, - "src": "10116:10:0", + "referencedDeclaration": 1017, + "src": "10088:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10116:10:0" + "src": "10088:10:0" } ], "name": "withdraw", "nodeType": "FunctionDefinition", "parameters": { - "id": 810, + "id": 806, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 809, + "id": 805, "name": "refundAddress", "nodeType": "VariableDeclaration", - "scope": 871, - "src": "10086:21:0", + "scope": 867, + "src": "10058:21:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26321,10 +26245,10 @@ "typeString": "address" }, "typeName": { - "id": 808, + "id": 804, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10086:7:0", + "src": "10058:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26334,45 +26258,45 @@ "visibility": "internal" } ], - "src": "10085:23:0" + "src": "10057:23:0" }, "payable": false, "returnParameters": { - "id": 813, + "id": 809, "nodeType": "ParameterList", "parameters": [], - "src": "10127:0:0" + "src": "10099:0:0" }, - "scope": 1080, - "src": "10068:587:0", + "scope": 1076, + "src": "10040:587:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 912, + "id": 908, "nodeType": "Block", - "src": "10801:322:0", + "src": "10773:322:0", "statements": [ { "body": { - "id": 906, + "id": 902, "nodeType": "Block", - "src": "10861:221:0", + "src": "10833:221:0", "statements": [ { "assignments": [ - 890 + 886 ], "declarations": [ { "constant": false, - "id": 890, + "id": 886, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 913, - "src": "10875:26:0", + "scope": 909, + "src": "10847:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26380,10 +26304,10 @@ "typeString": "address" }, "typeName": { - "id": 889, + "id": 885, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10875:7:0", + "src": "10847:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26393,31 +26317,31 @@ "visibility": "internal" } ], - "id": 894, + "id": 890, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 891, + "id": 887, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10904:15:0", + "src": "10876:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 893, + "id": 889, "indexExpression": { "argumentTypes": null, - "id": 892, + "id": 888, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "10920:1:0", + "referencedDeclaration": 875, + "src": "10892:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26428,19 +26352,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10904:18:0", + "src": "10876:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "10875:47:0" + "src": "10847:47:0" }, { "condition": { "argumentTypes": null, - "id": 899, + "id": 895, "isConstant": false, "isLValue": false, "isPure": false, @@ -26448,33 +26372,33 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10940:42:0", + "src": "10912:42:0", "subExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 895, + "id": 891, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10941:12:0", + "src": "10913:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 897, + "id": 893, "indexExpression": { "argumentTypes": null, - "id": 896, + "id": 892, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 890, - "src": "10954:18:0", + "referencedDeclaration": 886, + "src": "10926:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26485,13 +26409,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10941:32:0", + "src": "10913:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 898, + "id": 894, "isConstant": false, "isLValue": true, "isPure": false, @@ -26499,7 +26423,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10941:41:0", + "src": "10913:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -26511,13 +26435,13 @@ } }, "falseBody": null, - "id": 905, + "id": 901, "nodeType": "IfStatement", - "src": "10936:136:0", + "src": "10908:136:0", "trueBody": { - "id": 904, + "id": 900, "nodeType": "Block", - "src": "10984:88:0", + "src": "10956:88:0", "statements": [ { "expression": { @@ -26526,14 +26450,14 @@ { "argumentTypes": null, "hexValue": "4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f742079657420726566756e646564", - "id": 901, + "id": 897, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "11009:47:0", + "src": "10981:47:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_85d231c62370fa6b43ee7ffe2e2243eb8d4631e742e97de3a2558a277a825be1", @@ -26549,21 +26473,21 @@ "typeString": "literal_string \"At least one contributor has not yet refunded\"" } ], - "id": 900, + "id": 896, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1252, - 1253 + 1248, + 1249 ], - "referencedDeclaration": 1253, - "src": "11002:6:0", + "referencedDeclaration": 1249, + "src": "10974:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 902, + "id": 898, "isConstant": false, "isLValue": false, "isPure": false, @@ -26571,15 +26495,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11002:55:0", + "src": "10974:55:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 903, + "id": 899, "nodeType": "ExpressionStatement", - "src": "11002:55:0" + "src": "10974:55:0" } ] } @@ -26592,19 +26516,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 885, + "id": 881, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 882, + "id": 878, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "10828:1:0", + "referencedDeclaration": 875, + "src": "10800:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26616,18 +26540,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 883, + "id": 879, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10832:15:0", + "src": "10804:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 884, + "id": 880, "isConstant": false, "isLValue": true, "isPure": false, @@ -26635,31 +26559,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10832:22:0", + "src": "10804:22:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10828:26:0", + "src": "10800:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 907, + "id": 903, "initializationExpression": { "assignments": [ - 879 + 875 ], "declarations": [ { "constant": false, - "id": 879, + "id": 875, "name": "i", "nodeType": "VariableDeclaration", - "scope": 913, - "src": "10816:6:0", + "scope": 909, + "src": "10788:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26667,10 +26591,10 @@ "typeString": "uint256" }, "typeName": { - "id": 878, + "id": 874, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10816:4:0", + "src": "10788:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26680,18 +26604,18 @@ "visibility": "internal" } ], - "id": 881, + "id": 877, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 880, + "id": 876, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "10825:1:0", + "src": "10797:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -26700,12 +26624,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "10816:10:0" + "src": "10788:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 887, + "id": 883, "isConstant": false, "isLValue": false, "isPure": false, @@ -26713,15 +26637,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "10856:3:0", + "src": "10828:3:0", "subExpression": { "argumentTypes": null, - "id": 886, + "id": 882, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 879, - "src": "10856:1:0", + "referencedDeclaration": 875, + "src": "10828:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26732,12 +26656,12 @@ "typeString": "uint256" } }, - "id": 888, + "id": 884, "nodeType": "ExpressionStatement", - "src": "10856:3:0" + "src": "10828:3:0" }, "nodeType": "ForStatement", - "src": "10811:271:0" + "src": "10783:271:0" }, { "expression": { @@ -26745,12 +26669,12 @@ "arguments": [ { "argumentTypes": null, - "id": 909, + "id": 905, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "11104:11:0", + "src": "11076:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26764,18 +26688,18 @@ "typeString": "address" } ], - "id": 908, + "id": 904, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1255, - "src": "11091:12:0", + "referencedDeclaration": 1251, + "src": "11063:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 910, + "id": 906, "isConstant": false, "isLValue": false, "isPure": false, @@ -26783,89 +26707,89 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11091:25:0", + "src": "11063:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 911, + "id": 907, "nodeType": "ExpressionStatement", - "src": "11091:25:0" + "src": "11063:25:0" } ] }, "documentation": null, - "id": 913, + "id": 909, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 874, + "id": 870, "modifierName": { "argumentTypes": null, - "id": 873, + "id": 869, "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1079, - "src": "10778:11:0", + "referencedDeclaration": 1075, + "src": "10750:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10778:11:0" + "src": "10750:11:0" }, { "arguments": null, - "id": 876, + "id": 872, "modifierName": { "argumentTypes": null, - "id": 875, + "id": 871, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1021, - "src": "10790:10:0", + "referencedDeclaration": 1017, + "src": "10762:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10790:10:0" + "src": "10762:10:0" } ], "name": "destroy", "nodeType": "FunctionDefinition", "parameters": { - "id": 872, + "id": 868, "nodeType": "ParameterList", "parameters": [], - "src": "10768:2:0" + "src": "10740:2:0" }, "payable": false, "returnParameters": { - "id": 877, + "id": 873, "nodeType": "ParameterList", "parameters": [], - "src": "10801:0:0" + "src": "10773:0:0" }, - "scope": 1080, - "src": "10752:371:0", + "scope": 1076, + "src": "10724:371:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 927, + "id": 923, "nodeType": "Block", - "src": "11200:57:0", + "src": "11172:57:0", "statements": [ { "expression": { @@ -26874,7 +26798,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 925, + "id": 921, "isConstant": false, "isLValue": false, "isPure": false, @@ -26885,14 +26809,14 @@ { "argumentTypes": null, "hexValue": "32", - "id": 922, + "id": 918, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11233:1:0", + "src": "11205:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_2_by_1", @@ -26910,32 +26834,32 @@ ], "expression": { "argumentTypes": null, - "id": 920, + "id": 916, "name": "valueVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 915, - "src": "11217:11:0", + "referencedDeclaration": 911, + "src": "11189:11:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 921, + "id": 917, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1173, - "src": "11217:15:0", + "referencedDeclaration": 1169, + "src": "11189:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 923, + "id": 919, "isConstant": false, "isLValue": false, "isPure": false, @@ -26943,7 +26867,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11217:18:0", + "src": "11189:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26953,32 +26877,32 @@ "operator": ">", "rightExpression": { "argumentTypes": null, - "id": 924, + "id": 920, "name": "amountRaised", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 56, - "src": "11238:12:0", + "src": "11210:12:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11217:33:0", + "src": "11189:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 919, - "id": 926, + "functionReturnParameters": 915, + "id": 922, "nodeType": "Return", - "src": "11210:40:0" + "src": "11182:40:0" } ] }, "documentation": null, - "id": 928, + "id": 924, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -26986,16 +26910,16 @@ "name": "isMajorityVoting", "nodeType": "FunctionDefinition", "parameters": { - "id": 916, + "id": 912, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 915, + "id": 911, "name": "valueVoting", "nodeType": "VariableDeclaration", - "scope": 928, - "src": "11155:16:0", + "scope": 924, + "src": "11127:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27003,10 +26927,10 @@ "typeString": "uint256" }, "typeName": { - "id": 914, + "id": 910, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11155:4:0", + "src": "11127:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27016,20 +26940,20 @@ "visibility": "internal" } ], - "src": "11154:18:0" + "src": "11126:18:0" }, "payable": false, "returnParameters": { - "id": 919, + "id": 915, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 918, + "id": 914, "name": "", "nodeType": "VariableDeclaration", - "scope": 928, - "src": "11194:4:0", + "scope": 924, + "src": "11166:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27037,10 +26961,10 @@ "typeString": "bool" }, "typeName": { - "id": 917, + "id": 913, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11194:4:0", + "src": "11166:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27050,25 +26974,25 @@ "visibility": "internal" } ], - "src": "11193:6:0" + "src": "11165:6:0" }, - "scope": 1080, - "src": "11129:128:0", + "scope": 1076, + "src": "11101:128:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 958, + "id": 954, "nodeType": "Block", - "src": "11317:180:0", + "src": "11289:180:0", "statements": [ { "body": { - "id": 954, + "id": 950, "nodeType": "Block", - "src": "11370:99:0", + "src": "11342:99:0", "statements": [ { "condition": { @@ -27077,7 +27001,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 949, + "id": 945, "isConstant": false, "isLValue": false, "isPure": false, @@ -27086,18 +27010,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 944, + "id": 940, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "11388:3:0", + "referencedDeclaration": 1243, + "src": "11360:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 945, + "id": 941, "isConstant": false, "isLValue": false, "isPure": false, @@ -27105,7 +27029,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11388:10:0", + "src": "11360:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27117,26 +27041,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 946, + "id": 942, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11402:8:0", + "src": "11374:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 948, + "id": 944, "indexExpression": { "argumentTypes": null, - "id": 947, + "id": 943, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "11411:1:0", + "referencedDeclaration": 930, + "src": "11383:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27147,39 +27071,39 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11402:11:0", + "src": "11374:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "11388:25:0", + "src": "11360:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 953, + "id": 949, "nodeType": "IfStatement", - "src": "11384:75:0", + "src": "11356:75:0", "trueBody": { - "id": 952, + "id": 948, "nodeType": "Block", - "src": "11415:44:0", + "src": "11387:44:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 950, + "id": 946, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11440:4:0", + "src": "11412:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -27187,10 +27111,10 @@ }, "value": "true" }, - "functionReturnParameters": 932, - "id": 951, + "functionReturnParameters": 928, + "id": 947, "nodeType": "Return", - "src": "11433:11:0" + "src": "11405:11:0" } ] } @@ -27203,19 +27127,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 940, + "id": 936, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 937, + "id": 933, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "11344:1:0", + "referencedDeclaration": 930, + "src": "11316:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27227,18 +27151,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 938, + "id": 934, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11348:8:0", + "src": "11320:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 939, + "id": 935, "isConstant": false, "isLValue": true, "isPure": false, @@ -27246,31 +27170,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11348:15:0", + "src": "11320:15:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11344:19:0", + "src": "11316:19:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 955, + "id": 951, "initializationExpression": { "assignments": [ - 934 + 930 ], "declarations": [ { "constant": false, - "id": 934, + "id": 930, "name": "i", "nodeType": "VariableDeclaration", - "scope": 959, - "src": "11332:6:0", + "scope": 955, + "src": "11304:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27278,10 +27202,10 @@ "typeString": "uint256" }, "typeName": { - "id": 933, + "id": 929, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11332:4:0", + "src": "11304:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27291,18 +27215,18 @@ "visibility": "internal" } ], - "id": 936, + "id": 932, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 935, + "id": 931, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11341:1:0", + "src": "11313:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -27311,12 +27235,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "11332:10:0" + "src": "11304:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 942, + "id": 938, "isConstant": false, "isLValue": false, "isPure": false, @@ -27324,15 +27248,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "11365:3:0", + "src": "11337:3:0", "subExpression": { "argumentTypes": null, - "id": 941, + "id": 937, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 934, - "src": "11365:1:0", + "referencedDeclaration": 930, + "src": "11337:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27343,25 +27267,25 @@ "typeString": "uint256" } }, - "id": 943, + "id": 939, "nodeType": "ExpressionStatement", - "src": "11365:3:0" + "src": "11337:3:0" }, "nodeType": "ForStatement", - "src": "11327:142:0" + "src": "11299:142:0" }, { "expression": { "argumentTypes": null, "hexValue": "66616c7365", - "id": 956, + "id": 952, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11485:5:0", + "src": "11457:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -27369,15 +27293,15 @@ }, "value": "false" }, - "functionReturnParameters": 932, - "id": 957, + "functionReturnParameters": 928, + "id": 953, "nodeType": "Return", - "src": "11478:12:0" + "src": "11450:12:0" } ] }, "documentation": null, - "id": 959, + "id": 955, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27385,23 +27309,23 @@ "name": "isCallerTrustee", "nodeType": "FunctionDefinition", "parameters": { - "id": 929, + "id": 925, "nodeType": "ParameterList", "parameters": [], - "src": "11287:2:0" + "src": "11259:2:0" }, "payable": false, "returnParameters": { - "id": 932, + "id": 928, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 931, + "id": 927, "name": "", "nodeType": "VariableDeclaration", - "scope": 959, - "src": "11311:4:0", + "scope": 955, + "src": "11283:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27409,10 +27333,10 @@ "typeString": "bool" }, "typeName": { - "id": 930, + "id": 926, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11311:4:0", + "src": "11283:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27422,19 +27346,19 @@ "visibility": "internal" } ], - "src": "11310:6:0" + "src": "11282:6:0" }, - "scope": 1080, - "src": "11263:234:0", + "scope": 1076, + "src": "11235:234:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 971, + "id": 967, "nodeType": "Block", - "src": "11550:62:0", + "src": "11522:62:0", "statements": [ { "expression": { @@ -27443,7 +27367,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 969, + "id": 965, "isConstant": false, "isLValue": false, "isPure": false, @@ -27454,19 +27378,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 966, + "id": 962, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 964, + "id": 960, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, - "src": "11567:3:0", + "referencedDeclaration": 1245, + "src": "11539:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27476,18 +27400,18 @@ "operator": ">=", "rightExpression": { "argumentTypes": null, - "id": 965, + "id": 961, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "11574:8:0", + "src": "11546:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11567:15:0", + "src": "11539:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27497,7 +27421,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 968, + "id": 964, "isConstant": false, "isLValue": false, "isPure": false, @@ -27505,15 +27429,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "11586:19:0", + "src": "11558:19:0", "subExpression": { "argumentTypes": null, - "id": 967, + "id": 963, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "11587:18:0", + "src": "11559:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27524,21 +27448,21 @@ "typeString": "bool" } }, - "src": "11567:38:0", + "src": "11539:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 963, - "id": 970, + "functionReturnParameters": 959, + "id": 966, "nodeType": "Return", - "src": "11560:45:0" + "src": "11532:45:0" } ] }, "documentation": null, - "id": 972, + "id": 968, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27546,23 +27470,23 @@ "name": "isFailed", "nodeType": "FunctionDefinition", "parameters": { - "id": 960, + "id": 956, "nodeType": "ParameterList", "parameters": [], - "src": "11520:2:0" + "src": "11492:2:0" }, "payable": false, "returnParameters": { - "id": 963, + "id": 959, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 962, + "id": 958, "name": "", "nodeType": "VariableDeclaration", - "scope": 972, - "src": "11544:4:0", + "scope": 968, + "src": "11516:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27570,10 +27494,10 @@ "typeString": "bool" }, "typeName": { - "id": 961, + "id": 957, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11544:4:0", + "src": "11516:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27583,19 +27507,19 @@ "visibility": "internal" } ], - "src": "11543:6:0" + "src": "11515:6:0" }, - "scope": 1080, - "src": "11503:109:0", + "scope": 1076, + "src": "11475:109:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 988, + "id": 984, "nodeType": "Block", - "src": "11731:90:0", + "src": "11703:90:0", "statements": [ { "expression": { @@ -27606,26 +27530,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 981, + "id": 977, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11749:12:0", + "src": "11721:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 983, + "id": 979, "indexExpression": { "argumentTypes": null, - "id": 982, + "id": 978, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 974, - "src": "11762:18:0", + "referencedDeclaration": 970, + "src": "11734:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27636,13 +27560,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11749:32:0", + "src": "11721:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 984, + "id": 980, "isConstant": false, "isLValue": true, "isPure": false, @@ -27650,21 +27574,21 @@ "memberName": "milestoneNoVotes", "nodeType": "MemberAccess", "referencedDeclaration": 25, - "src": "11749:49:0", + "src": "11721:49:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_bool_$dyn_storage", "typeString": "bool[] storage ref" } }, - "id": 986, + "id": 982, "indexExpression": { "argumentTypes": null, - "id": 985, + "id": 981, "name": "milestoneIndex", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 976, - "src": "11799:14:0", + "referencedDeclaration": 972, + "src": "11771:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27675,21 +27599,21 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11749:65:0", + "src": "11721:65:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 980, - "id": 987, + "functionReturnParameters": 976, + "id": 983, "nodeType": "Return", - "src": "11742:72:0" + "src": "11714:72:0" } ] }, "documentation": null, - "id": 989, + "id": 985, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27697,16 +27621,16 @@ "name": "getContributorMilestoneVote", "nodeType": "FunctionDefinition", "parameters": { - "id": 977, + "id": 973, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 974, + "id": 970, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 989, - "src": "11655:26:0", + "scope": 985, + "src": "11627:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27714,10 +27638,10 @@ "typeString": "address" }, "typeName": { - "id": 973, + "id": 969, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11655:7:0", + "src": "11627:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27728,11 +27652,11 @@ }, { "constant": false, - "id": 976, + "id": 972, "name": "milestoneIndex", "nodeType": "VariableDeclaration", - "scope": 989, - "src": "11683:19:0", + "scope": 985, + "src": "11655:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27740,10 +27664,10 @@ "typeString": "uint256" }, "typeName": { - "id": 975, + "id": 971, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11683:4:0", + "src": "11655:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27753,20 +27677,20 @@ "visibility": "internal" } ], - "src": "11654:49:0" + "src": "11626:49:0" }, "payable": false, "returnParameters": { - "id": 980, + "id": 976, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 979, + "id": 975, "name": "", "nodeType": "VariableDeclaration", - "scope": 989, - "src": "11725:4:0", + "scope": 985, + "src": "11697:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27774,10 +27698,10 @@ "typeString": "bool" }, "typeName": { - "id": 978, + "id": 974, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11725:4:0", + "src": "11697:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27787,19 +27711,19 @@ "visibility": "internal" } ], - "src": "11724:6:0" + "src": "11696:6:0" }, - "scope": 1080, - "src": "11618:203:0", + "scope": 1076, + "src": "11590:203:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1001, + "id": 997, "nodeType": "Block", - "src": "11924:75:0", + "src": "11896:75:0", "statements": [ { "expression": { @@ -27808,26 +27732,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 996, + "id": 992, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11941:12:0", + "src": "11913:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 998, + "id": 994, "indexExpression": { "argumentTypes": null, - "id": 997, + "id": 993, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 991, - "src": "11954:18:0", + "referencedDeclaration": 987, + "src": "11926:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27838,13 +27762,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11941:32:0", + "src": "11913:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 999, + "id": 995, "isConstant": false, "isLValue": true, "isPure": false, @@ -27852,21 +27776,21 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "11941:51:0", + "src": "11913:51:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 995, - "id": 1000, + "functionReturnParameters": 991, + "id": 996, "nodeType": "Return", - "src": "11934:58:0" + "src": "11906:58:0" } ] }, "documentation": null, - "id": 1002, + "id": 998, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27874,16 +27798,16 @@ "name": "getContributorContributionAmount", "nodeType": "FunctionDefinition", "parameters": { - "id": 992, + "id": 988, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 991, + "id": 987, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 1002, - "src": "11869:26:0", + "scope": 998, + "src": "11841:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27891,10 +27815,10 @@ "typeString": "address" }, "typeName": { - "id": 990, + "id": 986, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11869:7:0", + "src": "11841:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27904,20 +27828,20 @@ "visibility": "internal" } ], - "src": "11868:28:0" + "src": "11840:28:0" }, "payable": false, "returnParameters": { - "id": 995, + "id": 991, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 994, + "id": 990, "name": "", "nodeType": "VariableDeclaration", - "scope": 1002, - "src": "11918:4:0", + "scope": 998, + "src": "11890:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27925,10 +27849,10 @@ "typeString": "uint256" }, "typeName": { - "id": 993, + "id": 989, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11918:4:0", + "src": "11890:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27938,19 +27862,19 @@ "visibility": "internal" } ], - "src": "11917:6:0" + "src": "11889:6:0" }, - "scope": 1080, - "src": "11827:172:0", + "scope": 1076, + "src": "11799:172:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1011, + "id": 1007, "nodeType": "Block", - "src": "12059:42:0", + "src": "12031:42:0", "statements": [ { "expression": { @@ -27958,12 +27882,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1008, + "id": 1004, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "12081:12:0", + "src": "12053:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -27977,20 +27901,20 @@ "typeString": "enum CrowdFund.FreezeReason" } ], - "id": 1007, + "id": 1003, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "12076:4:0", + "src": "12048:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint" }, - "id": 1009, + "id": 1005, "isConstant": false, "isLValue": false, "isPure": false, @@ -27998,21 +27922,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12076:18:0", + "src": "12048:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 1006, - "id": 1010, + "functionReturnParameters": 1002, + "id": 1006, "nodeType": "Return", - "src": "12069:25:0" + "src": "12041:25:0" } ] }, "documentation": null, - "id": 1012, + "id": 1008, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -28020,23 +27944,23 @@ "name": "getFreezeReason", "nodeType": "FunctionDefinition", "parameters": { - "id": 1003, + "id": 999, "nodeType": "ParameterList", "parameters": [], - "src": "12029:2:0" + "src": "12001:2:0" }, "payable": false, "returnParameters": { - "id": 1006, + "id": 1002, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1005, + "id": 1001, "name": "", "nodeType": "VariableDeclaration", - "scope": 1012, - "src": "12053:4:0", + "scope": 1008, + "src": "12025:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -28044,10 +27968,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1004, + "id": 1000, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "12053:4:0", + "src": "12025:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -28057,19 +27981,19 @@ "visibility": "internal" } ], - "src": "12052:6:0" + "src": "12024:6:0" }, - "scope": 1080, - "src": "12005:96:0", + "scope": 1076, + "src": "11977:96:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1020, + "id": 1016, "nodeType": "Block", - "src": "12129:70:0", + "src": "12101:70:0", "statements": [ { "expression": { @@ -28077,12 +28001,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1015, + "id": 1011, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12147:6:0", + "src": "12119:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28091,14 +28015,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 1016, + "id": 1012, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12155:25:0", + "src": "12127:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -28118,21 +28042,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 1014, + "id": 1010, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12139:7:0", + "referencedDeclaration": 1247, + "src": "12111:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1017, + "id": 1013, "isConstant": false, "isLValue": false, "isPure": false, @@ -28140,41 +28064,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12139:42:0", + "src": "12111:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1018, + "id": 1014, "nodeType": "ExpressionStatement", - "src": "12139:42:0" + "src": "12111:42:0" }, { - "id": 1019, + "id": 1015, "nodeType": "PlaceholderStatement", - "src": "12191:1:0" + "src": "12163:1:0" } ] }, "documentation": null, - "id": 1021, + "id": 1017, "name": "onlyFrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1013, + "id": 1009, "nodeType": "ParameterList", "parameters": [], - "src": "12126:2:0" + "src": "12098:2:0" }, - "src": "12107:92:0", + "src": "12079:92:0", "visibility": "internal" }, { "body": { - "id": 1030, + "id": 1026, "nodeType": "Block", - "src": "12229:67:0", + "src": "12201:67:0", "statements": [ { "expression": { @@ -28182,7 +28106,7 @@ "arguments": [ { "argumentTypes": null, - "id": 1025, + "id": 1021, "isConstant": false, "isLValue": false, "isPure": false, @@ -28190,15 +28114,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12247:7:0", + "src": "12219:7:0", "subExpression": { "argumentTypes": null, - "id": 1024, + "id": 1020, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12248:6:0", + "src": "12220:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28212,14 +28136,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e642069732066726f7a656e", - "id": 1026, + "id": 1022, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12256:21:0", + "src": "12228:21:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_21ebfed987d130de5e469bef5346c6c759f8769c3909e5f178aa85e98366503d", @@ -28239,21 +28163,21 @@ "typeString": "literal_string \"CrowdFund is frozen\"" } ], - "id": 1023, + "id": 1019, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12239:7:0", + "referencedDeclaration": 1247, + "src": "12211:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1027, + "id": 1023, "isConstant": false, "isLValue": false, "isPure": false, @@ -28261,41 +28185,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12239:39:0", + "src": "12211:39:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1028, + "id": 1024, "nodeType": "ExpressionStatement", - "src": "12239:39:0" + "src": "12211:39:0" }, { - "id": 1029, + "id": 1025, "nodeType": "PlaceholderStatement", - "src": "12288:1:0" + "src": "12260:1:0" } ] }, "documentation": null, - "id": 1031, + "id": 1027, "name": "onlyUnfrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1022, + "id": 1018, "nodeType": "ParameterList", "parameters": [], - "src": "12226:2:0" + "src": "12198:2:0" }, - "src": "12205:91:0", + "src": "12177:91:0", "visibility": "internal" }, { "body": { - "id": 1039, + "id": 1035, "nodeType": "Block", - "src": "12324:84:0", + "src": "12296:84:0", "statements": [ { "expression": { @@ -28303,12 +28227,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1034, + "id": 1030, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12342:18:0", + "src": "12314:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28317,14 +28241,14 @@ { "argumentTypes": null, "hexValue": "526169736520676f616c206973206e6f742072656163686564", - "id": 1035, + "id": 1031, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12362:27:0", + "src": "12334:27:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_d65d4721f73624ca6e381e7ad4c000f40a20c0abe88c0be62360bb906d10ffbe", @@ -28344,21 +28268,21 @@ "typeString": "literal_string \"Raise goal is not reached\"" } ], - "id": 1033, + "id": 1029, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12334:7:0", + "referencedDeclaration": 1247, + "src": "12306:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1036, + "id": 1032, "isConstant": false, "isLValue": false, "isPure": false, @@ -28366,41 +28290,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12334:56:0", + "src": "12306:56:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1037, + "id": 1033, "nodeType": "ExpressionStatement", - "src": "12334:56:0" + "src": "12306:56:0" }, { - "id": 1038, + "id": 1034, "nodeType": "PlaceholderStatement", - "src": "12400:1:0" + "src": "12372:1:0" } ] }, "documentation": null, - "id": 1040, + "id": 1036, "name": "onlyRaised", "nodeType": "ModifierDefinition", "parameters": { - "id": 1032, + "id": 1028, "nodeType": "ParameterList", "parameters": [], - "src": "12321:2:0" + "src": "12293:2:0" }, - "src": "12302:106:0", + "src": "12274:106:0", "visibility": "internal" }, { "body": { - "id": 1053, + "id": 1049, "nodeType": "Block", - "src": "12437:103:0", + "src": "12409:103:0", "statements": [ { "expression": { @@ -28412,7 +28336,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 1048, + "id": 1044, "isConstant": false, "isLValue": false, "isPure": false, @@ -28423,19 +28347,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1045, + "id": 1041, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 1043, + "id": 1039, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1249, - "src": "12455:3:0", + "referencedDeclaration": 1245, + "src": "12427:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -28445,18 +28369,18 @@ "operator": "<=", "rightExpression": { "argumentTypes": null, - "id": 1044, + "id": 1040, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "12462:8:0", + "src": "12434:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12455:15:0", + "src": "12427:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28466,7 +28390,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 1047, + "id": 1043, "isConstant": false, "isLValue": false, "isPure": false, @@ -28474,15 +28398,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12474:19:0", + "src": "12446:19:0", "subExpression": { "argumentTypes": null, - "id": 1046, + "id": 1042, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12475:18:0", + "src": "12447:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28493,7 +28417,7 @@ "typeString": "bool" } }, - "src": "12455:38:0", + "src": "12427:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28502,14 +28426,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f74206f6e676f696e67", - "id": 1049, + "id": 1045, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12495:26:0", + "src": "12467:26:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_843cc2d7a1ba19041b40561b89d21c7571d29e5c5e2d0d1510f441aea3fc1747", @@ -28529,21 +28453,21 @@ "typeString": "literal_string \"CrowdFund is not ongoing\"" } ], - "id": 1042, + "id": 1038, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12447:7:0", + "referencedDeclaration": 1247, + "src": "12419:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1050, + "id": 1046, "isConstant": false, "isLValue": false, "isPure": false, @@ -28551,41 +28475,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12447:75:0", + "src": "12419:75:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1051, + "id": 1047, "nodeType": "ExpressionStatement", - "src": "12447:75:0" + "src": "12419:75:0" }, { - "id": 1052, + "id": 1048, "nodeType": "PlaceholderStatement", - "src": "12532:1:0" + "src": "12504:1:0" } ] }, "documentation": null, - "id": 1054, + "id": 1050, "name": "onlyOnGoing", "nodeType": "ModifierDefinition", "parameters": { - "id": 1041, + "id": 1037, "nodeType": "ParameterList", "parameters": [], - "src": "12434:2:0" + "src": "12406:2:0" }, - "src": "12414:126:0", + "src": "12386:126:0", "visibility": "internal" }, { "body": { - "id": 1068, + "id": 1064, "nodeType": "Block", - "src": "12573:116:0", + "src": "12545:116:0", "statements": [ { "expression": { @@ -28597,7 +28521,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1063, + "id": 1059, "isConstant": false, "isLValue": false, "isPure": false, @@ -28608,34 +28532,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 1057, + "id": 1053, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "12591:12:0", + "src": "12563:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 1060, + "id": 1056, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1058, + "id": 1054, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1247, - "src": "12604:3:0", + "referencedDeclaration": 1243, + "src": "12576:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1059, + "id": 1055, "isConstant": false, "isLValue": false, "isPure": false, @@ -28643,7 +28567,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12604:10:0", + "src": "12576:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -28654,13 +28578,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12591:24:0", + "src": "12563:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 1061, + "id": 1057, "isConstant": false, "isLValue": true, "isPure": false, @@ -28668,7 +28592,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "12591:43:0", + "src": "12563:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -28679,14 +28603,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 1062, + "id": 1058, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "12638:1:0", + "src": "12610:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -28694,7 +28618,7 @@ }, "value": "0" }, - "src": "12591:48:0", + "src": "12563:48:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28703,14 +28627,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f74206120636f6e7472696275746f72", - "id": 1064, + "id": 1060, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12641:29:0", + "src": "12613:29:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_27c7012fc5b199883f3d6c1e7d0d3c9cd967752b2ed8ba1703713f2d84425e7b", @@ -28730,21 +28654,21 @@ "typeString": "literal_string \"Caller is not a contributor\"" } ], - "id": 1056, + "id": 1052, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12583:7:0", + "referencedDeclaration": 1247, + "src": "12555:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1065, + "id": 1061, "isConstant": false, "isLValue": false, "isPure": false, @@ -28752,41 +28676,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12583:88:0", + "src": "12555:88:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1066, + "id": 1062, "nodeType": "ExpressionStatement", - "src": "12583:88:0" + "src": "12555:88:0" }, { - "id": 1067, + "id": 1063, "nodeType": "PlaceholderStatement", - "src": "12681:1:0" + "src": "12653:1:0" } ] }, "documentation": null, - "id": 1069, + "id": 1065, "name": "onlyContributor", "nodeType": "ModifierDefinition", "parameters": { - "id": 1055, + "id": 1051, "nodeType": "ParameterList", "parameters": [], - "src": "12570:2:0" + "src": "12542:2:0" }, - "src": "12546:143:0", + "src": "12518:143:0", "visibility": "internal" }, { "body": { - "id": 1078, + "id": 1074, "nodeType": "Block", - "src": "12718:81:0", + "src": "12690:81:0", "statements": [ { "expression": { @@ -28797,18 +28721,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 1072, + "id": 1068, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 959, - "src": "12736:15:0", + "referencedDeclaration": 955, + "src": "12708:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 1073, + "id": 1069, "isConstant": false, "isLValue": false, "isPure": false, @@ -28816,7 +28740,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12736:17:0", + "src": "12708:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28825,14 +28749,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f7420612074727573746565", - "id": 1074, + "id": 1070, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12755:25:0", + "src": "12727:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_efecdf3be8b72bfbf67a07f441dfdb20b968592ad6d7fba48a91dfa72a34f2d8", @@ -28852,21 +28776,21 @@ "typeString": "literal_string \"Caller is not a trustee\"" } ], - "id": 1071, + "id": 1067, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1250, - 1251 + 1246, + 1247 ], - "referencedDeclaration": 1251, - "src": "12728:7:0", + "referencedDeclaration": 1247, + "src": "12700:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1075, + "id": 1071, "isConstant": false, "isLValue": false, "isPure": false, @@ -28874,42 +28798,42 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12728:53:0", + "src": "12700:53:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1076, + "id": 1072, "nodeType": "ExpressionStatement", - "src": "12728:53:0" + "src": "12700:53:0" }, { - "id": 1077, + "id": 1073, "nodeType": "PlaceholderStatement", - "src": "12791:1:0" + "src": "12763:1:0" } ] }, "documentation": null, - "id": 1079, + "id": 1075, "name": "onlyTrustee", "nodeType": "ModifierDefinition", "parameters": { - "id": 1070, + "id": 1066, "nodeType": "ParameterList", "parameters": [], - "src": "12715:2:0" + "src": "12687:2:0" }, - "src": "12695:104:0", + "src": "12667:104:0", "visibility": "internal" } ], - "scope": 1081, - "src": "87:12715:0" + "scope": 1077, + "src": "87:12687:0" } ], - "src": "0:12802:0" + "src": "0:12775:0" }, "compiler": { "name": "solc", @@ -28917,5 +28841,5 @@ }, "networks": {}, "schemaVersion": "2.0.1", - "updatedAt": "2018-09-26T03:49:30.936Z" + "updatedAt": "2018-11-16T20:36:37.827Z" } \ No newline at end of file diff --git a/contract/build/contracts/CrowdFundFactory.json b/contract/build/contracts/CrowdFundFactory.json index b42770e5..df48b963 100644 --- a/contract/build/contracts/CrowdFundFactory.json +++ b/contract/build/contracts/CrowdFundFactory.json @@ -57,24 +57,24 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50613692806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132ee8061037983390190560060806040523480156200001157600080fd5b50604051620032ee380380620032ee833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ae5179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c51806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029a165627a7a7230582038c1809b6ce57218a64a17a9211e1b79cca7e3c5a544e99070a9b555c6cb52430029", - "deployedBytecode": "0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132ee8061037983390190560060806040523480156200001157600080fd5b50604051620032ee380380620032ee833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ae5179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c51806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029a165627a7a7230582038c1809b6ce57218a64a17a9211e1b79cca7e3c5a544e99070a9b555c6cb52430029", + "bytecode": "0x608060405234801561001057600080fd5b50613684806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132e08061037983390190560060806040523480156200001157600080fd5b50604051620032e0380380620032e0833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ad7179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c43806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029a165627a7a72305820934808680be9c81f1fba40415b4ca3b9b11aaa579220c370ce09f0bdcdd30d220029", + "deployedBytecode": "0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132e08061037983390190560060806040523480156200001157600080fd5b50604051620032e0380380620032e0833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ad7179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c43806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029a165627a7a72305820934808680be9c81f1fba40415b4ca3b9b11aaa579220c370ce09f0bdcdd30d220029", "sourceMap": "52:860:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52:860:1;;;;;;;", "deployedSourceMap": "52:860:1:-;;;;;;;;;;;;;;;;;;;;;;;;159:751;;8:9:-1;5:2;;;30:1;27;20:12;5:2;159:751:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;462:7;481:28;539:15;568:13;595:17;626:13;653:17;684:30;728:29;512:255;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;512:255:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;512:255:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;512:255:1;481:286;;782:37;798:20;782:37;;;;;;;;;;;;;;;;;;;;;;829:10;845:20;829:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;829:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;883:20;876:27;;159:751;;;;;;;;;;:::o;52:860::-;;;;;;;;;;:::o", "source": "pragma solidity ^0.4.24;\nimport \"./CrowdFund.sol\";\n\ncontract CrowdFundFactory {\n address[] crowdfunds;\n\n event ContractCreated(address newAddress);\n\n function createCrowdFund (\n uint raiseGoalAmount, \n address payOutAddress, \n address[] trusteesAddresses, \n uint[] allMilestones,\n uint durationInSeconds,\n uint milestoneVotingPeriodInSeconds,\n bool immediateFirstMilestonePayout\n ) public returns(address) {\n address newCrowdFundContract = new CrowdFund(\n raiseGoalAmount,\n payOutAddress,\n trusteesAddresses,\n allMilestones,\n durationInSeconds,\n milestoneVotingPeriodInSeconds,\n immediateFirstMilestonePayout\n );\n emit ContractCreated(newCrowdFundContract);\n crowdfunds.push(newCrowdFundContract);\n return newCrowdFundContract;\n }\n}", - "sourcePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFundFactory.sol", + "sourcePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFundFactory.sol", "ast": { - "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFundFactory.sol", + "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFundFactory.sol", "exportedSymbols": { "CrowdFundFactory": [ - 1138 + 1134 ] }, - "id": 1139, + "id": 1135, "nodeType": "SourceUnit", "nodes": [ { - "id": 1082, + "id": 1078, "literals": [ "solidity", "^", @@ -85,12 +85,12 @@ "src": "0:24:1" }, { - "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", "file": "./CrowdFund.sol", - "id": 1083, + "id": 1079, "nodeType": "ImportDirective", - "scope": 1139, - "sourceUnit": 1081, + "scope": 1135, + "sourceUnit": 1077, "src": "25:25:1", "symbolAliases": [], "unitAlias": "" @@ -98,24 +98,24 @@ { "baseContracts": [], "contractDependencies": [ - 1080 + 1076 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1138, + "id": 1134, "linearizedBaseContracts": [ - 1138 + 1134 ], "name": "CrowdFundFactory", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, - "id": 1086, + "id": 1082, "name": "crowdfunds", "nodeType": "VariableDeclaration", - "scope": 1138, + "scope": 1134, "src": "84:20:1", "stateVariable": true, "storageLocation": "default", @@ -125,7 +125,7 @@ }, "typeName": { "baseType": { - "id": 1084, + "id": 1080, "name": "address", "nodeType": "ElementaryTypeName", "src": "84:7:1", @@ -134,7 +134,7 @@ "typeString": "address" } }, - "id": 1085, + "id": 1081, "length": null, "nodeType": "ArrayTypeName", "src": "84:9:1", @@ -149,20 +149,20 @@ { "anonymous": false, "documentation": null, - "id": 1090, + "id": 1086, "name": "ContractCreated", "nodeType": "EventDefinition", "parameters": { - "id": 1089, + "id": 1085, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1088, + "id": 1084, "indexed": false, "name": "newAddress", "nodeType": "VariableDeclaration", - "scope": 1090, + "scope": 1086, "src": "133:18:1", "stateVariable": false, "storageLocation": "default", @@ -171,7 +171,7 @@ "typeString": "address" }, "typeName": { - "id": 1087, + "id": 1083, "name": "address", "nodeType": "ElementaryTypeName", "src": "133:7:1", @@ -190,21 +190,21 @@ }, { "body": { - "id": 1136, + "id": 1132, "nodeType": "Block", "src": "471:439:1", "statements": [ { "assignments": [ - 1112 + 1108 ], "declarations": [ { "constant": false, - "id": 1112, + "id": 1108, "name": "newCrowdFundContract", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "481:28:1", "stateVariable": false, "storageLocation": "default", @@ -213,7 +213,7 @@ "typeString": "address" }, "typeName": { - "id": 1111, + "id": 1107, "name": "address", "nodeType": "ElementaryTypeName", "src": "481:7:1", @@ -226,17 +226,17 @@ "visibility": "internal" } ], - "id": 1123, + "id": 1119, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 1115, + "id": 1111, "name": "raiseGoalAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1092, + "referencedDeclaration": 1088, "src": "539:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -245,11 +245,11 @@ }, { "argumentTypes": null, - "id": 1116, + "id": 1112, "name": "payOutAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1094, + "referencedDeclaration": 1090, "src": "568:13:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -258,11 +258,11 @@ }, { "argumentTypes": null, - "id": 1117, + "id": 1113, "name": "trusteesAddresses", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1097, + "referencedDeclaration": 1093, "src": "595:17:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", @@ -271,11 +271,11 @@ }, { "argumentTypes": null, - "id": 1118, + "id": 1114, "name": "allMilestones", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1100, + "referencedDeclaration": 1096, "src": "626:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -284,11 +284,11 @@ }, { "argumentTypes": null, - "id": 1119, + "id": 1115, "name": "durationInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1102, + "referencedDeclaration": 1098, "src": "653:17:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -297,11 +297,11 @@ }, { "argumentTypes": null, - "id": 1120, + "id": 1116, "name": "milestoneVotingPeriodInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1104, + "referencedDeclaration": 1100, "src": "684:30:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -310,11 +310,11 @@ }, { "argumentTypes": null, - "id": 1121, + "id": 1117, "name": "immediateFirstMilestonePayout", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1106, + "referencedDeclaration": 1102, "src": "728:29:1", "typeDescriptions": { "typeIdentifier": "t_bool", @@ -353,7 +353,7 @@ "typeString": "bool" } ], - "id": 1114, + "id": 1110, "isConstant": false, "isLValue": false, "isPure": false, @@ -361,23 +361,23 @@ "nodeType": "NewExpression", "src": "512:13:1", "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1080_$", + "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1076_$", "typeString": "function (uint256,address,address[] memory,uint256[] memory,uint256,uint256,bool) returns (contract CrowdFund)" }, "typeName": { "contractScope": null, - "id": 1113, + "id": 1109, "name": "CrowdFund", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1080, + "referencedDeclaration": 1076, "src": "516:9:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } } }, - "id": 1122, + "id": 1118, "isConstant": false, "isLValue": false, "isPure": false, @@ -387,7 +387,7 @@ "nodeType": "FunctionCall", "src": "512:255:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } }, @@ -400,11 +400,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1125, + "id": 1121, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1112, + "referencedDeclaration": 1108, "src": "798:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -419,18 +419,18 @@ "typeString": "address" } ], - "id": 1124, + "id": 1120, "name": "ContractCreated", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1090, + "referencedDeclaration": 1086, "src": "782:15:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 1126, + "id": 1122, "isConstant": false, "isLValue": false, "isPure": false, @@ -444,7 +444,7 @@ "typeString": "tuple()" } }, - "id": 1127, + "id": 1123, "nodeType": "EmitStatement", "src": "777:42:1" }, @@ -454,11 +454,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1131, + "id": 1127, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1112, + "referencedDeclaration": 1108, "src": "845:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -475,18 +475,18 @@ ], "expression": { "argumentTypes": null, - "id": 1128, + "id": 1124, "name": "crowdfunds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1086, + "referencedDeclaration": 1082, "src": "829:10:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 1130, + "id": 1126, "isConstant": false, "isLValue": false, "isPure": false, @@ -500,7 +500,7 @@ "typeString": "function (address) returns (uint256)" } }, - "id": 1132, + "id": 1128, "isConstant": false, "isLValue": false, "isPure": false, @@ -514,33 +514,33 @@ "typeString": "uint256" } }, - "id": 1133, + "id": 1129, "nodeType": "ExpressionStatement", "src": "829:37:1" }, { "expression": { "argumentTypes": null, - "id": 1134, + "id": 1130, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1112, + "referencedDeclaration": 1108, "src": "883:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "functionReturnParameters": 1110, - "id": 1135, + "functionReturnParameters": 1106, + "id": 1131, "nodeType": "Return", "src": "876:27:1" } ] }, "documentation": null, - "id": 1137, + "id": 1133, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -548,15 +548,15 @@ "name": "createCrowdFund", "nodeType": "FunctionDefinition", "parameters": { - "id": 1107, + "id": 1103, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1092, + "id": 1088, "name": "raiseGoalAmount", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "194:20:1", "stateVariable": false, "storageLocation": "default", @@ -565,7 +565,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1091, + "id": 1087, "name": "uint", "nodeType": "ElementaryTypeName", "src": "194:4:1", @@ -579,10 +579,10 @@ }, { "constant": false, - "id": 1094, + "id": 1090, "name": "payOutAddress", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "225:21:1", "stateVariable": false, "storageLocation": "default", @@ -591,7 +591,7 @@ "typeString": "address" }, "typeName": { - "id": 1093, + "id": 1089, "name": "address", "nodeType": "ElementaryTypeName", "src": "225:7:1", @@ -605,10 +605,10 @@ }, { "constant": false, - "id": 1097, + "id": 1093, "name": "trusteesAddresses", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "257:27:1", "stateVariable": false, "storageLocation": "default", @@ -618,7 +618,7 @@ }, "typeName": { "baseType": { - "id": 1095, + "id": 1091, "name": "address", "nodeType": "ElementaryTypeName", "src": "257:7:1", @@ -627,7 +627,7 @@ "typeString": "address" } }, - "id": 1096, + "id": 1092, "length": null, "nodeType": "ArrayTypeName", "src": "257:9:1", @@ -641,10 +641,10 @@ }, { "constant": false, - "id": 1100, + "id": 1096, "name": "allMilestones", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "295:20:1", "stateVariable": false, "storageLocation": "default", @@ -654,7 +654,7 @@ }, "typeName": { "baseType": { - "id": 1098, + "id": 1094, "name": "uint", "nodeType": "ElementaryTypeName", "src": "295:4:1", @@ -663,7 +663,7 @@ "typeString": "uint256" } }, - "id": 1099, + "id": 1095, "length": null, "nodeType": "ArrayTypeName", "src": "295:6:1", @@ -677,10 +677,10 @@ }, { "constant": false, - "id": 1102, + "id": 1098, "name": "durationInSeconds", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "325:22:1", "stateVariable": false, "storageLocation": "default", @@ -689,7 +689,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1101, + "id": 1097, "name": "uint", "nodeType": "ElementaryTypeName", "src": "325:4:1", @@ -703,10 +703,10 @@ }, { "constant": false, - "id": 1104, + "id": 1100, "name": "milestoneVotingPeriodInSeconds", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "357:35:1", "stateVariable": false, "storageLocation": "default", @@ -715,7 +715,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1103, + "id": 1099, "name": "uint", "nodeType": "ElementaryTypeName", "src": "357:4:1", @@ -729,10 +729,10 @@ }, { "constant": false, - "id": 1106, + "id": 1102, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "402:34:1", "stateVariable": false, "storageLocation": "default", @@ -741,7 +741,7 @@ "typeString": "bool" }, "typeName": { - "id": 1105, + "id": 1101, "name": "bool", "nodeType": "ElementaryTypeName", "src": "402:4:1", @@ -758,15 +758,15 @@ }, "payable": false, "returnParameters": { - "id": 1110, + "id": 1106, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1109, + "id": 1105, "name": "", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "462:7:1", "stateVariable": false, "storageLocation": "default", @@ -775,7 +775,7 @@ "typeString": "address" }, "typeName": { - "id": 1108, + "id": 1104, "name": "address", "nodeType": "ElementaryTypeName", "src": "462:7:1", @@ -790,31 +790,31 @@ ], "src": "461:9:1" }, - "scope": 1138, + "scope": 1134, "src": "159:751:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" } ], - "scope": 1139, + "scope": 1135, "src": "52:860:1" } ], "src": "0:912:1" }, "legacyAST": { - "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFundFactory.sol", + "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFundFactory.sol", "exportedSymbols": { "CrowdFundFactory": [ - 1138 + 1134 ] }, - "id": 1139, + "id": 1135, "nodeType": "SourceUnit", "nodes": [ { - "id": 1082, + "id": 1078, "literals": [ "solidity", "^", @@ -825,12 +825,12 @@ "src": "0:24:1" }, { - "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", "file": "./CrowdFund.sol", - "id": 1083, + "id": 1079, "nodeType": "ImportDirective", - "scope": 1139, - "sourceUnit": 1081, + "scope": 1135, + "sourceUnit": 1077, "src": "25:25:1", "symbolAliases": [], "unitAlias": "" @@ -838,24 +838,24 @@ { "baseContracts": [], "contractDependencies": [ - 1080 + 1076 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1138, + "id": 1134, "linearizedBaseContracts": [ - 1138 + 1134 ], "name": "CrowdFundFactory", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, - "id": 1086, + "id": 1082, "name": "crowdfunds", "nodeType": "VariableDeclaration", - "scope": 1138, + "scope": 1134, "src": "84:20:1", "stateVariable": true, "storageLocation": "default", @@ -865,7 +865,7 @@ }, "typeName": { "baseType": { - "id": 1084, + "id": 1080, "name": "address", "nodeType": "ElementaryTypeName", "src": "84:7:1", @@ -874,7 +874,7 @@ "typeString": "address" } }, - "id": 1085, + "id": 1081, "length": null, "nodeType": "ArrayTypeName", "src": "84:9:1", @@ -889,20 +889,20 @@ { "anonymous": false, "documentation": null, - "id": 1090, + "id": 1086, "name": "ContractCreated", "nodeType": "EventDefinition", "parameters": { - "id": 1089, + "id": 1085, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1088, + "id": 1084, "indexed": false, "name": "newAddress", "nodeType": "VariableDeclaration", - "scope": 1090, + "scope": 1086, "src": "133:18:1", "stateVariable": false, "storageLocation": "default", @@ -911,7 +911,7 @@ "typeString": "address" }, "typeName": { - "id": 1087, + "id": 1083, "name": "address", "nodeType": "ElementaryTypeName", "src": "133:7:1", @@ -930,21 +930,21 @@ }, { "body": { - "id": 1136, + "id": 1132, "nodeType": "Block", "src": "471:439:1", "statements": [ { "assignments": [ - 1112 + 1108 ], "declarations": [ { "constant": false, - "id": 1112, + "id": 1108, "name": "newCrowdFundContract", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "481:28:1", "stateVariable": false, "storageLocation": "default", @@ -953,7 +953,7 @@ "typeString": "address" }, "typeName": { - "id": 1111, + "id": 1107, "name": "address", "nodeType": "ElementaryTypeName", "src": "481:7:1", @@ -966,17 +966,17 @@ "visibility": "internal" } ], - "id": 1123, + "id": 1119, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 1115, + "id": 1111, "name": "raiseGoalAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1092, + "referencedDeclaration": 1088, "src": "539:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -985,11 +985,11 @@ }, { "argumentTypes": null, - "id": 1116, + "id": 1112, "name": "payOutAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1094, + "referencedDeclaration": 1090, "src": "568:13:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -998,11 +998,11 @@ }, { "argumentTypes": null, - "id": 1117, + "id": 1113, "name": "trusteesAddresses", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1097, + "referencedDeclaration": 1093, "src": "595:17:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", @@ -1011,11 +1011,11 @@ }, { "argumentTypes": null, - "id": 1118, + "id": 1114, "name": "allMilestones", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1100, + "referencedDeclaration": 1096, "src": "626:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -1024,11 +1024,11 @@ }, { "argumentTypes": null, - "id": 1119, + "id": 1115, "name": "durationInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1102, + "referencedDeclaration": 1098, "src": "653:17:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -1037,11 +1037,11 @@ }, { "argumentTypes": null, - "id": 1120, + "id": 1116, "name": "milestoneVotingPeriodInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1104, + "referencedDeclaration": 1100, "src": "684:30:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -1050,11 +1050,11 @@ }, { "argumentTypes": null, - "id": 1121, + "id": 1117, "name": "immediateFirstMilestonePayout", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1106, + "referencedDeclaration": 1102, "src": "728:29:1", "typeDescriptions": { "typeIdentifier": "t_bool", @@ -1093,7 +1093,7 @@ "typeString": "bool" } ], - "id": 1114, + "id": 1110, "isConstant": false, "isLValue": false, "isPure": false, @@ -1101,23 +1101,23 @@ "nodeType": "NewExpression", "src": "512:13:1", "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1080_$", + "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1076_$", "typeString": "function (uint256,address,address[] memory,uint256[] memory,uint256,uint256,bool) returns (contract CrowdFund)" }, "typeName": { "contractScope": null, - "id": 1113, + "id": 1109, "name": "CrowdFund", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1080, + "referencedDeclaration": 1076, "src": "516:9:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } } }, - "id": 1122, + "id": 1118, "isConstant": false, "isLValue": false, "isPure": false, @@ -1127,7 +1127,7 @@ "nodeType": "FunctionCall", "src": "512:255:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1080", + "typeIdentifier": "t_contract$_CrowdFund_$1076", "typeString": "contract CrowdFund" } }, @@ -1140,11 +1140,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1125, + "id": 1121, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1112, + "referencedDeclaration": 1108, "src": "798:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1159,18 +1159,18 @@ "typeString": "address" } ], - "id": 1124, + "id": 1120, "name": "ContractCreated", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1090, + "referencedDeclaration": 1086, "src": "782:15:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 1126, + "id": 1122, "isConstant": false, "isLValue": false, "isPure": false, @@ -1184,7 +1184,7 @@ "typeString": "tuple()" } }, - "id": 1127, + "id": 1123, "nodeType": "EmitStatement", "src": "777:42:1" }, @@ -1194,11 +1194,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1131, + "id": 1127, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1112, + "referencedDeclaration": 1108, "src": "845:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1215,18 +1215,18 @@ ], "expression": { "argumentTypes": null, - "id": 1128, + "id": 1124, "name": "crowdfunds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1086, + "referencedDeclaration": 1082, "src": "829:10:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 1130, + "id": 1126, "isConstant": false, "isLValue": false, "isPure": false, @@ -1240,7 +1240,7 @@ "typeString": "function (address) returns (uint256)" } }, - "id": 1132, + "id": 1128, "isConstant": false, "isLValue": false, "isPure": false, @@ -1254,33 +1254,33 @@ "typeString": "uint256" } }, - "id": 1133, + "id": 1129, "nodeType": "ExpressionStatement", "src": "829:37:1" }, { "expression": { "argumentTypes": null, - "id": 1134, + "id": 1130, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1112, + "referencedDeclaration": 1108, "src": "883:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "functionReturnParameters": 1110, - "id": 1135, + "functionReturnParameters": 1106, + "id": 1131, "nodeType": "Return", "src": "876:27:1" } ] }, "documentation": null, - "id": 1137, + "id": 1133, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -1288,15 +1288,15 @@ "name": "createCrowdFund", "nodeType": "FunctionDefinition", "parameters": { - "id": 1107, + "id": 1103, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1092, + "id": 1088, "name": "raiseGoalAmount", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "194:20:1", "stateVariable": false, "storageLocation": "default", @@ -1305,7 +1305,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1091, + "id": 1087, "name": "uint", "nodeType": "ElementaryTypeName", "src": "194:4:1", @@ -1319,10 +1319,10 @@ }, { "constant": false, - "id": 1094, + "id": 1090, "name": "payOutAddress", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "225:21:1", "stateVariable": false, "storageLocation": "default", @@ -1331,7 +1331,7 @@ "typeString": "address" }, "typeName": { - "id": 1093, + "id": 1089, "name": "address", "nodeType": "ElementaryTypeName", "src": "225:7:1", @@ -1345,10 +1345,10 @@ }, { "constant": false, - "id": 1097, + "id": 1093, "name": "trusteesAddresses", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "257:27:1", "stateVariable": false, "storageLocation": "default", @@ -1358,7 +1358,7 @@ }, "typeName": { "baseType": { - "id": 1095, + "id": 1091, "name": "address", "nodeType": "ElementaryTypeName", "src": "257:7:1", @@ -1367,7 +1367,7 @@ "typeString": "address" } }, - "id": 1096, + "id": 1092, "length": null, "nodeType": "ArrayTypeName", "src": "257:9:1", @@ -1381,10 +1381,10 @@ }, { "constant": false, - "id": 1100, + "id": 1096, "name": "allMilestones", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "295:20:1", "stateVariable": false, "storageLocation": "default", @@ -1394,7 +1394,7 @@ }, "typeName": { "baseType": { - "id": 1098, + "id": 1094, "name": "uint", "nodeType": "ElementaryTypeName", "src": "295:4:1", @@ -1403,7 +1403,7 @@ "typeString": "uint256" } }, - "id": 1099, + "id": 1095, "length": null, "nodeType": "ArrayTypeName", "src": "295:6:1", @@ -1417,10 +1417,10 @@ }, { "constant": false, - "id": 1102, + "id": 1098, "name": "durationInSeconds", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "325:22:1", "stateVariable": false, "storageLocation": "default", @@ -1429,7 +1429,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1101, + "id": 1097, "name": "uint", "nodeType": "ElementaryTypeName", "src": "325:4:1", @@ -1443,10 +1443,10 @@ }, { "constant": false, - "id": 1104, + "id": 1100, "name": "milestoneVotingPeriodInSeconds", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "357:35:1", "stateVariable": false, "storageLocation": "default", @@ -1455,7 +1455,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1103, + "id": 1099, "name": "uint", "nodeType": "ElementaryTypeName", "src": "357:4:1", @@ -1469,10 +1469,10 @@ }, { "constant": false, - "id": 1106, + "id": 1102, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "402:34:1", "stateVariable": false, "storageLocation": "default", @@ -1481,7 +1481,7 @@ "typeString": "bool" }, "typeName": { - "id": 1105, + "id": 1101, "name": "bool", "nodeType": "ElementaryTypeName", "src": "402:4:1", @@ -1498,15 +1498,15 @@ }, "payable": false, "returnParameters": { - "id": 1110, + "id": 1106, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1109, + "id": 1105, "name": "", "nodeType": "VariableDeclaration", - "scope": 1137, + "scope": 1133, "src": "462:7:1", "stateVariable": false, "storageLocation": "default", @@ -1515,7 +1515,7 @@ "typeString": "address" }, "typeName": { - "id": 1108, + "id": 1104, "name": "address", "nodeType": "ElementaryTypeName", "src": "462:7:1", @@ -1530,14 +1530,14 @@ ], "src": "461:9:1" }, - "scope": 1138, + "scope": 1134, "src": "159:751:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" } ], - "scope": 1139, + "scope": 1135, "src": "52:860:1" } ], @@ -1548,19 +1548,25 @@ "version": "0.4.24+commit.e67f0147.Emscripten.clang" }, "networks": { - "3": { + "1541435837030": { "events": {}, "links": {}, - "address": "0x2bfade54e1afc13d50bcb14b8134aafc0be59558", - "transactionHash": "0xf9aa2d035873d9ae6f3bf1d3a254ca774c22b2cd37c3d92ee41218fe3677e5f2" + "address": "0x893717db73a6f9785772080b3a0bc9cd24b27ea2", + "transactionHash": "0xe7b84dc8a577ba38bebf38cc2928ed550ab00de70b5000c334d6d1137b223ad1" }, - "1537836920395": { + "1541447574419": { "events": {}, "links": {}, - "address": "0xf313d4b4f8c2467d6552c51392076ba90aa233b3", - "transactionHash": "0x6158097c6dcb93aeaad4b21ea540bf2a97d52050c04d36e54558df1aff60bbb8" + "address": "0x0f919d15940c0a6c11ee6f4c88ae5d03d91246bf", + "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" + }, + "1542400539532": { + "events": {}, + "links": {}, + "address": "0x23de420265da56889af074254dd900bc888efbf6", + "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" } }, "schemaVersion": "2.0.1", - "updatedAt": "2018-09-26T04:00:55.909Z" + "updatedAt": "2018-11-16T20:37:00.160Z" } \ No newline at end of file diff --git a/frontend/client/api/api.ts b/frontend/client/api/api.ts index 0a5070ae..339dc029 100644 --- a/frontend/client/api/api.ts +++ b/frontend/client/api/api.ts @@ -2,21 +2,16 @@ import axios from './axios'; import { Proposal, ProposalDraft, - TeamMember, + User, Update, TeamInvite, TeamInviteWithProposal, } from 'types'; -import { - formatTeamMemberForPost, - formatTeamMemberFromGet, - generateProposalUrl, -} from 'utils/api'; +import { formatUserForPost, generateProposalUrl } from 'utils/api'; export function getProposals(): Promise<{ data: Proposal[] }> { return axios.get('/api/v1/proposals/').then(res => { res.data = res.data.map((proposal: any) => { - proposal.team = proposal.team.map(formatTeamMemberFromGet); proposal.proposalUrlId = generateProposalUrl(proposal.proposalId, proposal.title); return proposal; }); @@ -26,7 +21,6 @@ export function getProposals(): Promise<{ data: Proposal[] }> { export function getProposal(proposalId: number | string): Promise<{ data: Proposal }> { return axios.get(`/api/v1/proposals/${proposalId}`).then(res => { - res.data.team = res.data.team.map(formatTeamMemberFromGet); res.data.proposalUrlId = generateProposalUrl(res.data.proposalId, res.data.title); return res; }); @@ -44,15 +38,12 @@ export function postProposal(payload: ProposalDraft) { return axios.post(`/api/v1/proposals/`, { ...payload, // Team has a different shape for POST - team: payload.team.map(formatTeamMemberForPost), + team: payload.team.map(formatUserForPost), }); } -export function getUser(address: string): Promise<{ data: TeamMember }> { - return axios.get(`/api/v1/users/${address}`).then(res => { - res.data = formatTeamMemberFromGet(res.data); - return res; - }); +export function getUser(address: string): Promise<{ data: User }> { + return axios.get(`/api/v1/users/${address}`); } export function createUser(payload: { @@ -62,31 +53,20 @@ export function createUser(payload: { title: string; signedMessage: string; rawTypedData: string; -}): Promise<{ data: TeamMember }> { - return axios.post('/api/v1/users', payload).then(res => { - res.data = formatTeamMemberFromGet(res.data); - return res; - }); +}): Promise<{ data: User }> { + return axios.post('/api/v1/users', payload); } export function authUser(payload: { accountAddress: string; signedMessage: string; rawTypedData: string; -}): Promise<{ data: TeamMember }> { - return axios.post('/api/v1/users/auth', payload).then(res => { - res.data = formatTeamMemberFromGet(res.data); - return res; - }); +}): Promise<{ data: User }> { + return axios.post('/api/v1/users/auth', payload); } -export function updateUser(user: TeamMember): Promise<{ data: TeamMember }> { - return axios - .put(`/api/v1/users/${user.ethAddress}`, formatTeamMemberForPost(user)) - .then(res => { - res.data = formatTeamMemberFromGet(res.data); - return res; - }); +export function updateUser(user: User): Promise<{ data: User }> { + return axios.put(`/api/v1/users/${user.accountAddress}`, formatUserForPost(user)); } export function verifyEmail(code: string): Promise { @@ -105,13 +85,7 @@ export function postProposalUpdate( } export function getProposalDrafts(): Promise<{ data: ProposalDraft[] }> { - return axios.get('/api/v1/proposals/drafts').then(res => { - res.data = res.data.map((draft: any) => ({ - ...draft, - team: draft.team.map(formatTeamMemberFromGet), - })); - return res; - }); + return axios.get('/api/v1/proposals/drafts'); } export function postProposalDraft(): Promise<{ data: ProposalDraft }> { diff --git a/frontend/client/components/AuthFlow/SignIn.tsx b/frontend/client/components/AuthFlow/SignIn.tsx index 78ef6a08..e9848eba 100644 --- a/frontend/client/components/AuthFlow/SignIn.tsx +++ b/frontend/client/components/AuthFlow/SignIn.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { Button, Alert } from 'antd'; import { authActions } from 'modules/auth'; -import { TeamMember } from 'types'; +import { User } from 'types'; import { AppState } from 'store/reducers'; import { AUTH_PROVIDER } from 'utils/auth'; import Identicon from 'components/Identicon'; @@ -20,7 +20,7 @@ interface DispatchProps { interface OwnProps { // TODO: Use common use User type instead - user: TeamMember; + user: User; provider: AUTH_PROVIDER; reset(): void; } @@ -34,11 +34,14 @@ class SignIn extends React.Component {
- +
-
{user.name}
+
{user.displayName}
- +
@@ -69,7 +72,7 @@ class SignIn extends React.Component { } private authUser = () => { - this.props.authUser(this.props.user.ethAddress); + this.props.authUser(this.props.user.accountAddress); }; } diff --git a/frontend/client/components/CreateFlow/Review.tsx b/frontend/client/components/CreateFlow/Review.tsx index fab1ccd2..dafbc8ee 100644 --- a/frontend/client/components/CreateFlow/Review.tsx +++ b/frontend/client/components/CreateFlow/Review.tsx @@ -218,7 +218,7 @@ const ReviewTeam: React.SFC<{
-
{u.name}
+
{u.displayName}
{u.title}
diff --git a/frontend/client/components/CreateFlow/Team.tsx b/frontend/client/components/CreateFlow/Team.tsx index f09e48ad..330a4f59 100644 --- a/frontend/client/components/CreateFlow/Team.tsx +++ b/frontend/client/components/CreateFlow/Team.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { connect } from 'react-redux'; import { Icon, Form, Input, Button, Popconfirm, message } from 'antd'; -import { TeamMember, TeamInvite, ProposalDraft } from 'types'; +import { User, TeamInvite, ProposalDraft } from 'types'; import TeamMemberComponent from './TeamMember'; import { postProposalInvite, deleteProposalInvite } from 'api/api'; import { isValidEthAddress, isValidEmail } from 'utils/validators'; @@ -9,7 +9,7 @@ import { AppState } from 'store/reducers'; import './Team.less'; interface State { - team: TeamMember[]; + team: User[]; invites: TeamInvite[]; address: string; } @@ -28,16 +28,7 @@ type Props = OwnProps & StateProps; const MAX_TEAM_SIZE = 6; const DEFAULT_STATE: State = { - team: [ - { - name: '', - title: '', - avatarUrl: '', - ethAddress: '', - emailAddress: '', - socialAccounts: {}, - }, - ], + team: [], invites: [], address: '', }; @@ -50,16 +41,8 @@ class CreateFlowTeam extends React.Component { ...(props.initialState || {}), }; - // Don't allow for empty team array - if (!this.state.team.length) { - this.state = { - ...this.state, - team: [...DEFAULT_STATE.team], - }; - } - // Auth'd user is always first member of a team - if (props.authUser) { + if (props.authUser && !this.state.team.length) { this.state.team[0] = { ...props.authUser, }; @@ -77,8 +60,8 @@ class CreateFlowTeam extends React.Component { return (
- {team.map((user, idx) => ( - + {team.map(user => ( + ))} {!!pendingInvites.length && (
diff --git a/frontend/client/components/CreateFlow/TeamMember.tsx b/frontend/client/components/CreateFlow/TeamMember.tsx index 86deaf73..39f13478 100644 --- a/frontend/client/components/CreateFlow/TeamMember.tsx +++ b/frontend/client/components/CreateFlow/TeamMember.tsx @@ -2,18 +2,17 @@ import React from 'react'; import classnames from 'classnames'; import { Icon } from 'antd'; import { SOCIAL_INFO } from 'utils/social'; -import { TeamMember } from 'types'; +import { User } from 'types'; import UserAvatar from 'components/UserAvatar'; import './TeamMember.less'; interface Props { - index: number; - user: TeamMember; + user: User; } export default class CreateFlowTeamMember extends React.PureComponent { render() { - const { user, index } = this.props; + const { user } = this.props; return (
@@ -21,11 +20,13 @@ export default class CreateFlowTeamMember extends React.PureComponent {
-
{user.name || No name}
+
+ {user.displayName || No name} +
{user.title || No title}
{Object.values(SOCIAL_INFO).map(s => { - const account = user.socialAccounts[s.type]; + const account = user.socialMedias.find(sm => s.service === sm.service); const cn = classnames( 'TeamMember-info-social-icon', account && 'is-active', diff --git a/frontend/client/components/Profile/ProfileEdit.tsx b/frontend/client/components/Profile/ProfileEdit.tsx index 974b2a1b..81b71b9d 100644 --- a/frontend/client/components/Profile/ProfileEdit.tsx +++ b/frontend/client/components/Profile/ProfileEdit.tsx @@ -2,7 +2,7 @@ import React from 'react'; import lodash from 'lodash'; import { Input, Form, Col, Row, Button, Icon, Alert } from 'antd'; import { SOCIAL_INFO } from 'utils/social'; -import { SOCIAL_TYPE, TeamMember } from 'types'; +import { SOCIAL_SERVICE, User } from 'types'; import { UserState } from 'modules/users/reducers'; import { getCreateTeamMemberError } from 'modules/create/utils'; import UserAvatar from 'components/UserAvatar'; @@ -11,18 +11,18 @@ import './ProfileEdit.less'; interface Props { user: UserState; onDone(): void; - onEdit(user: TeamMember): void; + onEdit(user: User): void; } interface State { - fields: TeamMember; + fields: User; isChanged: boolean; showError: boolean; } export default class ProfileEdit extends React.PureComponent { state: State = { - fields: { ...this.props.user } as TeamMember, + fields: { ...this.props.user } as User, isChanged: false, showError: false, }; @@ -48,7 +48,10 @@ export default class ProfileEdit extends React.PureComponent { const { fields } = this.state; const error = getCreateTeamMemberError(fields); const isMissingField = - !fields.name || !fields.title || !fields.emailAddress || !fields.ethAddress; + !fields.displayName || + !fields.title || + !fields.emailAddress || + !fields.accountAddress; const isDisabled = !!error || isMissingField || !this.state.isChanged; return ( @@ -62,11 +65,11 @@ export default class ProfileEdit extends React.PureComponent { > -
{fields.avatarUrl ? 'Change photo' : 'Add photo'}
+
{fields.avatar ? 'Change photo' : 'Add photo'}
- {fields.avatarUrl && ( + {fields.avatar && (
diff --git a/frontend/client/components/Profile/ProfileUser.tsx b/frontend/client/components/Profile/ProfileUser.tsx index 33cbf998..a660301b 100644 --- a/frontend/client/components/Profile/ProfileUser.tsx +++ b/frontend/client/components/Profile/ProfileUser.tsx @@ -1,13 +1,12 @@ import React from 'react'; import { connect } from 'react-redux'; import { Button } from 'antd'; -import { SocialInfo } from 'types'; +import { SocialMedia } from 'types'; import { usersActions } from 'modules/users'; import { UserState } from 'modules/users/reducers'; -import { typedKeys } from 'utils/ts'; import ProfileEdit from './ProfileEdit'; import UserAvatar from 'components/UserAvatar'; -import { SOCIAL_INFO, socialAccountToUrl } from 'utils/social'; +import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social'; import ShortAddress from 'components/ShortAddress'; import './ProfileUser.less'; import { AppState } from 'store/reducers'; @@ -39,10 +38,10 @@ class ProfileUser extends React.Component { const { authUser, user, - user: { socialAccounts }, + user: { socialMedias }, } = this.props; - const isSelf = !!authUser && authUser.ethAddress === user.ethAddress; + const isSelf = !!authUser && authUser.accountAddress === user.accountAddress; if (this.state.isEditing) { return ( @@ -60,7 +59,7 @@ class ProfileUser extends React.Component {
-
{user.name}
+
{user.displayName}
{user.title}
{user.emailAddress && ( @@ -69,26 +68,18 @@ class ProfileUser extends React.Component { {user.emailAddress}
)} - {user.ethAddress && ( + {user.accountAddress && (
ethereum address - +
)}
- {Object.keys(socialAccounts).length > 0 && ( + {socialMedias.length > 0 && (
- {typedKeys(SOCIAL_INFO).map( - s => - (socialAccounts[s] && ( - - )) || - null, - )} + {socialMedias.map(sm => ( + + ))}
)} {isSelf && ( @@ -104,10 +95,12 @@ class ProfileUser extends React.Component { } } -const Social = ({ account, info }: { account: string; info: SocialInfo }) => { +const Social = ({ socialMedia }: { socialMedia: SocialMedia }) => { return ( - -
{info.icon}
+
+
+ {SOCIAL_INFO[socialMedia.service].icon} +
); }; diff --git a/frontend/client/components/Profile/index.tsx b/frontend/client/components/Profile/index.tsx index 88a16a5a..2dc7114e 100644 --- a/frontend/client/components/Profile/index.tsx +++ b/frontend/client/components/Profile/index.tsx @@ -5,7 +5,7 @@ import { usersActions } from 'modules/users'; import { AppState } from 'store/reducers'; import { connect } from 'react-redux'; import { compose } from 'recompose'; -import { Spin, Tabs, Badge, message } from 'antd'; +import { Spin, Tabs, Badge } from 'antd'; import HeaderDetails from 'components/HeaderDetails'; import ProfileUser from './ProfileUser'; import ProfileProposal from './ProfileProposal'; @@ -46,8 +46,8 @@ class Profile extends React.Component { const userLookupParam = this.props.match.params.id; const { authUser } = this.props; if (!userLookupParam) { - if (authUser && authUser.ethAddress) { - return ; + if (authUser && authUser.accountAddress) { + return ; } else { return ; } @@ -56,7 +56,8 @@ class Profile extends React.Component { const user = this.props.usersMap[userLookupParam]; const waiting = !user || !user.hasFetched; // TODO: Replace with userid checks - const isAuthedUser = user && authUser && user.ethAddress === authUser.ethAddress; + const isAuthedUser = + user && authUser && user.accountAddress === authUser.accountAddress; if (waiting) { return ; @@ -77,9 +78,9 @@ class Profile extends React.Component { {/* TODO: SSR fetch user details */} {/* TODO: customize details for funders/creators */} @@ -117,7 +118,11 @@ class Profile extends React.Component {
{noneCommented && } {comments.map(c => ( - + ))}
@@ -137,7 +142,7 @@ class Profile extends React.Component { {invites.map(invite => ( ))} diff --git a/frontend/client/components/Proposal/TeamBlock/index.tsx b/frontend/client/components/Proposal/TeamBlock/index.tsx index 2b50a15e..bed95932 100644 --- a/frontend/client/components/Proposal/TeamBlock/index.tsx +++ b/frontend/client/components/Proposal/TeamBlock/index.tsx @@ -10,7 +10,7 @@ interface Props { const TeamBlock = ({ proposal }: Props) => { let content; if (proposal) { - content = proposal.team.map(user => ); + content = proposal.team.map(user => ); } else { content = ; } diff --git a/frontend/client/components/Proposals/ProposalCard/index.tsx b/frontend/client/components/Proposals/ProposalCard/index.tsx index da0e99d1..63f4e7a1 100644 --- a/frontend/client/components/Proposals/ProposalCard/index.tsx +++ b/frontend/client/components/Proposals/ProposalCard/index.tsx @@ -65,7 +65,8 @@ export class ProposalCard extends React.Component {
- {team[0].name} {team.length > 1 && +{team.length - 1} other} + {team[0].displayName}{' '} + {team.length > 1 && +{team.length - 1} other}
{[...team].reverse().map((u, idx) => ( diff --git a/frontend/client/components/UserAvatar.tsx b/frontend/client/components/UserAvatar.tsx index f16166d6..71028334 100644 --- a/frontend/client/components/UserAvatar.tsx +++ b/frontend/client/components/UserAvatar.tsx @@ -1,18 +1,18 @@ import React from 'react'; import Identicon from 'components/Identicon'; -import { TeamMember } from 'types'; +import { User } from 'types'; import defaultUserImg from 'static/images/default-user.jpg'; interface Props { - user: TeamMember; + user: User; className?: string; } const UserAvatar: React.SFC = ({ user, className }) => { - if (user.avatarUrl) { - return ; - } else if (user.ethAddress) { - return ; + if (user.avatar && user.avatar.image_url) { + return ; + } else if (user.accountAddress) { + return ; } else { return ; } diff --git a/frontend/client/components/UserRow/index.tsx b/frontend/client/components/UserRow/index.tsx index 82da12db..fff76bc9 100644 --- a/frontend/client/components/UserRow/index.tsx +++ b/frontend/client/components/UserRow/index.tsx @@ -1,20 +1,20 @@ import React from 'react'; import UserAvatar from 'components/UserAvatar'; -import { TeamMember } from 'types'; +import { User } from 'types'; import { Link } from 'react-router-dom'; import './style.less'; interface Props { - user: TeamMember; + user: User; } const UserRow = ({ user }: Props) => ( - +
-
{user.name}
+
{user.displayName}

{user.title}

diff --git a/frontend/client/modules/auth/reducers.ts b/frontend/client/modules/auth/reducers.ts index 4bfa9085..1a230dce 100644 --- a/frontend/client/modules/auth/reducers.ts +++ b/frontend/client/modules/auth/reducers.ts @@ -1,13 +1,13 @@ import types from './types'; // TODO: Use a common User type instead of this -import { TeamMember, AuthSignatureData } from 'types'; +import { User, AuthSignatureData } from 'types'; export interface AuthState { - user: TeamMember | null; + user: User | null; isAuthingUser: boolean; authUserError: string | null; - checkedUsers: { [address: string]: TeamMember | false }; + checkedUsers: { [address: string]: User | false }; isCheckingUser: boolean; isCreatingUser: boolean; @@ -53,7 +53,7 @@ export default function createReducer( ...state, user: action.payload.user, authSignature: action.payload.authSignature, // TODO: Make this the real token - authSignatureAddress: action.payload.user.ethAddress, + authSignatureAddress: action.payload.user.accountAddress, isAuthingUser: false, }; case types.AUTH_USER_REJECTED: @@ -74,7 +74,7 @@ export default function createReducer( ...state, user: action.payload.user, authSignature: action.payload.authSignature, - authSignatureAddress: action.payload.user.ethAddress, + authSignatureAddress: action.payload.user.accountAddress, isCreatingUser: false, checkedUsers: { ...state.checkedUsers, diff --git a/frontend/client/modules/create/utils.ts b/frontend/client/modules/create/utils.ts index c455b09d..e22e84f5 100644 --- a/frontend/client/modules/create/utils.ts +++ b/frontend/client/modules/create/utils.ts @@ -1,5 +1,5 @@ import { ProposalDraft, CreateMilestone } from 'types'; -import { TeamMember } from 'types'; +import { User } from 'types'; import { isValidEthAddress, getAmountError } from 'utils/validators'; import { MILESTONE_STATE, ProposalWithCrowdFund } from 'types'; import { ProposalContractData } from 'modules/web3/actions'; @@ -153,7 +153,7 @@ export function getCreateErrors( if (team) { let didTeamError = false; const teamErrors = team.map(u => { - if (!u.name || !u.title || !u.emailAddress || !u.ethAddress) { + if (!u.displayName || !u.title || !u.emailAddress || !u.accountAddress) { didTeamError = true; return ''; } @@ -170,14 +170,14 @@ export function getCreateErrors( return errors; } -export function getCreateTeamMemberError(user: TeamMember) { - if (user.name.length > 30) { +export function getCreateTeamMemberError(user: User) { + if (user.displayName.length > 30) { return 'Display name can only be 30 characters maximum'; } else if (user.title.length > 30) { return 'Title can only be 30 characters maximum'; } else if (!/.+\@.+\..+/.test(user.emailAddress)) { return 'That doesn’t look like a valid email address'; - } else if (!isValidEthAddress(user.ethAddress)) { + } else if (!isValidEthAddress(user.accountAddress)) { return 'That doesn’t look like a valid ETH address'; } @@ -235,6 +235,7 @@ export function makeProposalPreviewFromDraft( proposalAddress: '0x0', dateCreated: Date.now(), title: draft.title, + brief: draft.brief, content: draft.content, stage: 'preview', category: draft.category || PROPOSAL_CATEGORY.DAPP, diff --git a/frontend/client/modules/users/actions.ts b/frontend/client/modules/users/actions.ts index bfd4a24d..5224f4ac 100644 --- a/frontend/client/modules/users/actions.ts +++ b/frontend/client/modules/users/actions.ts @@ -1,4 +1,4 @@ -import { UserProposal, UserComment, TeamMember } from 'types'; +import { UserProposal, UserComment, User } from 'types'; import types from './types'; import { getUser, @@ -28,7 +28,7 @@ export function fetchUser(userFetchId: string) { }; } -export function updateUser(user: TeamMember) { +export function updateUser(user: User) { const userClone = cleanClone(INITIAL_TEAM_MEMBER_STATE, user); return async (dispatch: Dispatch) => { dispatch({ type: types.UPDATE_USER_PENDING, payload: { user } }); diff --git a/frontend/client/modules/users/reducers.ts b/frontend/client/modules/users/reducers.ts index 58626eac..c5a09705 100644 --- a/frontend/client/modules/users/reducers.ts +++ b/frontend/client/modules/users/reducers.ts @@ -1,14 +1,14 @@ import lodash from 'lodash'; import { UserProposal, UserComment, TeamInviteWithProposal } from 'types'; import types from './types'; -import { TeamMember } from 'types'; +import { User } from 'types'; export interface TeamInviteWithResponse extends TeamInviteWithProposal { isResponding: boolean; respondError: number | null; } -export interface UserState extends TeamMember { +export interface UserState extends User { isFetching: boolean; hasFetched: boolean; fetchError: number | null; @@ -36,12 +36,13 @@ export interface UsersState { map: { [index: string]: UserState }; } -export const INITIAL_TEAM_MEMBER_STATE: TeamMember = { - ethAddress: '', - avatarUrl: '', - name: '', +export const INITIAL_TEAM_MEMBER_STATE: User = { + userid: 0, + accountAddress: '', + avatar: null, + displayName: '', emailAddress: '', - socialAccounts: {}, + socialMedias: [], title: '', }; @@ -105,19 +106,19 @@ export default (state = INITIAL_STATE, action: any) => { }); // update case types.UPDATE_USER_PENDING: - return updateUserState(state, payload.user.ethAddress, { + return updateUserState(state, payload.user.accountAddress, { isUpdating: true, updateError: null, }); case types.UPDATE_USER_FULFILLED: return updateUserState( state, - payload.user.ethAddress, + payload.user.accountAddress, { isUpdating: false }, payload.user, ); case types.UPDATE_USER_REJECTED: - return updateUserState(state, payload.user.ethAddress, { + return updateUserState(state, payload.user.accountAddress, { isUpdating: false, updateError: errorStatus, }); diff --git a/frontend/client/pages/settings.tsx b/frontend/client/pages/settings.tsx index 0f8e486f..0df42939 100644 --- a/frontend/client/pages/settings.tsx +++ b/frontend/client/pages/settings.tsx @@ -9,7 +9,7 @@ interface Props { class ProfilePage extends React.Component { render() { const { user } = this.props; - return

Settings for {user && user.name}

; + return

Settings for {user && user.displayName}

; } } diff --git a/frontend/client/utils/api.ts b/frontend/client/utils/api.ts index c4d30672..434afa87 100644 --- a/frontend/client/utils/api.ts +++ b/frontend/client/utils/api.ts @@ -1,29 +1,11 @@ -import { TeamMember } from 'types'; -import { socialAccountsToUrls, socialUrlsToAccounts } from 'utils/social'; +import { User } from 'types'; +import { socialMediaToUrl } from 'utils/social'; -export function formatTeamMemberForPost(user: TeamMember) { +export function formatUserForPost(user: User) { return { - displayName: user.name, - title: user.title, - accountAddress: user.ethAddress, - emailAddress: user.emailAddress, - avatar: user.avatarUrl ? { link: user.avatarUrl } : {}, - socialMedias: socialAccountsToUrls(user.socialAccounts).map(url => ({ - link: url, - })), - }; -} - -export function formatTeamMemberFromGet(user: any): TeamMember { - return { - name: user.displayName, - title: user.title, - ethAddress: user.accountAddress, - emailAddress: user.emailAddress, - avatarUrl: user.avatar && user.avatar.imageUrl, - socialAccounts: socialUrlsToAccounts( - user.socialMedias.map((sm: any) => sm.socialMediaLink), - ), + ...user, + avatar: user.avatar ? user.avatar.image_url : null, + socialMedias: user.socialMedias.map(socialMediaToUrl), }; } diff --git a/frontend/client/utils/social.tsx b/frontend/client/utils/social.tsx index 02b1774a..b7859474 100644 --- a/frontend/client/utils/social.tsx +++ b/frontend/client/utils/social.tsx @@ -1,60 +1,36 @@ import React from 'react'; import { Icon } from 'antd'; import keybaseIcon from 'static/images/keybase.svg'; -import { SOCIAL_TYPE, SocialAccountMap, SocialInfo } from 'types'; +import { SOCIAL_SERVICE, SocialMedia, SocialInfo } from 'types'; const accountNameRegex = '([a-zA-Z0-9-_]*)'; -export const SOCIAL_INFO: { [key in SOCIAL_TYPE]: SocialInfo } = { - [SOCIAL_TYPE.GITHUB]: { - type: SOCIAL_TYPE.GITHUB, +export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = { + [SOCIAL_SERVICE.GITHUB]: { + service: SOCIAL_SERVICE.GITHUB, name: 'Github', format: `https://github.com/${accountNameRegex}`, icon: , }, - [SOCIAL_TYPE.TWITTER]: { - type: SOCIAL_TYPE.TWITTER, + [SOCIAL_SERVICE.TWITTER]: { + service: SOCIAL_SERVICE.TWITTER, name: 'Twitter', format: `https://twitter.com/${accountNameRegex}`, icon: , }, - [SOCIAL_TYPE.LINKEDIN]: { - type: SOCIAL_TYPE.LINKEDIN, + [SOCIAL_SERVICE.LINKEDIN]: { + service: SOCIAL_SERVICE.LINKEDIN, name: 'LinkedIn', format: `https://linkedin.com/in/${accountNameRegex}`, icon: , }, - [SOCIAL_TYPE.KEYBASE]: { - type: SOCIAL_TYPE.KEYBASE, + [SOCIAL_SERVICE.KEYBASE]: { + service: SOCIAL_SERVICE.KEYBASE, name: 'KeyBase', format: `https://keybase.io/${accountNameRegex}`, icon: , }, }; -function urlToAccount(format: string, url: string): string | false { - const matches = url.match(new RegExp(format)); - return matches && matches[1] ? matches[1] : false; -} - -export function socialAccountToUrl(account: string, type: SOCIAL_TYPE): string { - return SOCIAL_INFO[type].format.replace(accountNameRegex, account); -} - -export function socialUrlsToAccounts(urls: string[]): SocialAccountMap { - const accounts: SocialAccountMap = {}; - urls.forEach(url => { - Object.values(SOCIAL_INFO).forEach(s => { - const account = urlToAccount(s.format, url); - if (account) { - accounts[s.type] = account; - } - }); - }); - return accounts; -} - -export function socialAccountsToUrls(accounts: SocialAccountMap): string[] { - return Object.entries(accounts).map(([key, value]) => { - return socialAccountToUrl(value as string, key as SOCIAL_TYPE); - }); +export function socialMediaToUrl(sm: SocialMedia): string { + return SOCIAL_INFO[sm.service].format.replace(accountNameRegex, sm.username); } diff --git a/frontend/stories/UserRow.story.tsx b/frontend/stories/UserRow.story.tsx index e7d8b8e0..029c3d97 100644 --- a/frontend/stories/UserRow.story.tsx +++ b/frontend/stories/UserRow.story.tsx @@ -2,20 +2,31 @@ import * as React from 'react'; import { BrowserRouter } from 'react-router-dom'; import { storiesOf } from '@storybook/react'; import { DONATION } from 'utils/constants'; +import { User } from 'types'; import 'components/UserRow/style.less'; import UserRow from 'components/UserRow'; -const user = { - name: 'Dana Hayes', +const user: User = { + userid: 123, + displayName: 'Dana Hayes', title: 'QA Engineer', - avatarUrl: 'https://randomuser.me/api/portraits/women/19.jpg', - ethAddress: DONATION.ETH, + avatar: { + image_url: 'https://randomuser.me/api/portraits/women/19.jpg', + }, + accountAddress: DONATION.ETH, emailAddress: 'test@test.test', - socialAccounts: {}, + socialMedias: [], }; -const cases = [ +interface Case { + disp: string; + props: { + user: User; + }; +} + +const cases: Case[] = [ { disp: 'Full User', props: { @@ -29,7 +40,7 @@ const cases = [ props: { user: { ...user, - avatarUrl: '', + avatar: null, }, }, }, @@ -38,8 +49,8 @@ const cases = [ props: { user: { ...user, - avatarUrl: '', - ethAddress: '', + avatar: null, + accountAddress: '', }, }, }, @@ -48,7 +59,7 @@ const cases = [ props: { user: { ...user, - name: 'Dr. Baron Longnamivitch von Testeronomous III Esq.', + displayName: 'Dr. Baron Longnamivitch von Testeronomous III Esq.', title: 'Amazing person, all around cool neat-o guy, 10/10 would order again', }, }, diff --git a/frontend/stories/props.tsx b/frontend/stories/props.tsx index ff9055d1..29256c52 100644 --- a/frontend/stories/props.tsx +++ b/frontend/stories/props.tsx @@ -161,33 +161,37 @@ export function getProposalWithCrowdFund({ proposalAddress: '0x033fDc6C01DC2385118C7bAAB88093e22B8F0710', dateCreated: created / 1000, title: 'Crowdfund Title', + brief: 'A cool test crowdfund', content: 'body', stage: 'FUNDING_REQUIRED', category: PROPOSAL_CATEGORY.COMMUNITY, team: [ { - name: 'Test Proposer', + userid: 123, + displayName: 'Test Proposer', title: '', - ethAddress: '0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7', + accountAddress: '0x0c7C6178AD0618Bf289eFd5E1Ff9Ada25fC3bDE7', emailAddress: '', - avatarUrl: '', - socialAccounts: {}, + avatar: null, + socialMedias: [], }, { - name: 'Test Proposer', + userid: 456, + displayName: 'Test Proposer', title: '', - ethAddress: '0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520', + accountAddress: '0x4bbeEB066eD09B7AEd07bF39EEe0460DFa261520', emailAddress: '', - avatarUrl: '', - socialAccounts: {}, + avatar: null, + socialMedias: [], }, { - name: 'Test Proposer', + userid: 789, + displayName: 'Test Proposer', title: '', - ethAddress: '0x529104532a9779ea9eae0c1e325b3368e0f8add4', + accountAddress: '0x529104532a9779ea9eae0c1e325b3368e0f8add4', emailAddress: '', - avatarUrl: '', - socialAccounts: {}, + avatar: null, + socialMedias: [], }, ], milestones, diff --git a/frontend/types/proposal.ts b/frontend/types/proposal.ts index 7d75bdcb..9b537831 100644 --- a/frontend/types/proposal.ts +++ b/frontend/types/proposal.ts @@ -4,7 +4,7 @@ import { CreateMilestone, ProposalMilestone, Update, - TeamMember, + User, Milestone, Comment, } from 'types'; @@ -57,7 +57,7 @@ export interface ProposalDraft { deadlineDuration: number; voteDuration: number; milestones: CreateMilestone[]; - team: TeamMember[]; + team: User[]; invites: TeamInvite[]; } @@ -72,7 +72,7 @@ export interface Proposal { stage: string; category: PROPOSAL_CATEGORY; milestones: ProposalMilestone[]; - team: TeamMember[]; + team: User[]; } export interface ProposalWithCrowdFund extends Proposal { @@ -99,7 +99,7 @@ export interface UserProposal { proposalId: number; title: string; brief: string; - team: TeamMember[]; + team: User[]; funded: Wei; target: Wei; } diff --git a/frontend/types/social.ts b/frontend/types/social.ts index cf740aaf..4c99cec2 100644 --- a/frontend/types/social.ts +++ b/frontend/types/social.ts @@ -1,15 +1,20 @@ import React from 'react'; -export type SocialAccountMap = Partial<{ [key in SOCIAL_TYPE]: string }>; +export type SocialAccountMap = Partial<{ [key in SOCIAL_SERVICE]: string }>; + +export interface SocialMedia { + service: SOCIAL_SERVICE; + username: string; +} export interface SocialInfo { - type: SOCIAL_TYPE; + service: SOCIAL_SERVICE; name: string; format: string; icon: React.ReactNode; } -export enum SOCIAL_TYPE { +export enum SOCIAL_SERVICE { GITHUB = 'GITHUB', TWITTER = 'TWITTER', LINKEDIN = 'LINKEDIN', diff --git a/frontend/types/user.ts b/frontend/types/user.ts index 8b5a4497..15467da5 100644 --- a/frontend/types/user.ts +++ b/frontend/types/user.ts @@ -1,21 +1,11 @@ -import { SocialAccountMap } from 'types'; +import { SocialMedia } from 'types'; export interface User { + userid: number; accountAddress: string; - userid: number | string; - username: string; + emailAddress: string; // TODO: Split into full user type + displayName: string; title: string; - avatar: { - '120x120': string; - }; -} - -// TODO: Merge this or extend the `User` type in proposals/reducers.ts -export interface TeamMember { - name: string; - title: string; - avatarUrl: string; - ethAddress: string; - emailAddress: string; - socialAccounts: SocialAccountMap; + socialMedias: SocialMedia[]; + avatar: { image_url: string } | null; } From c51b1e2dab837bb49b79a7dbc2faf56d10bf9d33 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Mon, 19 Nov 2018 15:23:56 -0500 Subject: [PATCH 27/32] Finish up user and social media conversions. --- backend/grant/user/models.py | 7 ++++++- backend/grant/user/views.py | 4 ---- backend/grant/utils/social.py | 2 +- backend/tests/user/test_user_api.py | 8 ++++++-- contract/build/contracts/CrowdFundFactory.json | 8 +++++++- e2e/cypress/integration/create.spec.ts | 8 ++++---- frontend/client/components/Profile/ProfileEdit.tsx | 5 +++-- frontend/client/components/Profile/ProfileUser.tsx | 4 ++-- frontend/client/components/Profile/index.tsx | 2 +- frontend/client/components/UserAvatar.tsx | 4 ++-- frontend/client/utils/api.ts | 4 ++-- frontend/client/utils/social.tsx | 6 +++--- frontend/stories/UserRow.story.tsx | 2 +- frontend/types/social.ts | 1 + frontend/types/user.ts | 2 +- 15 files changed, 40 insertions(+), 27 deletions(-) diff --git a/backend/grant/user/models.py b/backend/grant/user/models.py index 961158d0..c0f224f3 100644 --- a/backend/grant/user/models.py +++ b/backend/grant/user/models.py @@ -124,17 +124,22 @@ class SocialMediaSchema(ma.Schema): model = SocialMedia # Fields to expose fields = ( + "url", "service", "username", ) + url = ma.Method("get_url") service = ma.Method("get_service") username = ma.Method("get_username") + def get_url(self, obj): + return obj.social_media_link + def get_service(self, obj): info = get_social_info_from_url(obj.social_media_link) return info['service'] - + def get_username(self, obj): info = get_social_info_from_url(obj.social_media_link) return info['username'] diff --git a/backend/grant/user/views.py b/backend/grant/user/views.py index 76e9ac3d..5d3b53a9 100644 --- a/backend/grant/user/views.py +++ b/backend/grant/user/views.py @@ -39,13 +39,9 @@ def get_me(): @blueprint.route("/", methods=["GET"]) @endpoint.api() def get_user(user_identity): - print('get by ident') user = User.get_by_identifier(email_address=user_identity, account_address=user_identity) - print(user) if user: - print('dumping') result = user_schema.dump(user) - print(result) return result else: message = "User with account_address or user_identity matching {} not found".format(user_identity) diff --git a/backend/grant/utils/social.py b/backend/grant/utils/social.py index ab05ceb3..a8c6432f 100644 --- a/backend/grant/utils/social.py +++ b/backend/grant/utils/social.py @@ -15,5 +15,5 @@ def get_social_info_from_url(url: str): if match: return { 'service': service, - 'username': match.group(1), + 'username': match.group(1) } diff --git a/backend/tests/user/test_user_api.py b/backend/tests/user/test_user_api.py index d60ae76f..e9006cca 100644 --- a/backend/tests/user/test_user_api.py +++ b/backend/tests/user/test_user_api.py @@ -44,7 +44,9 @@ class TestAPI(BaseUserConfig): users_json = users_get_resp.json self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url) - self.assertEqual(users_json["socialMedias"][0]["socialMediaLink"], self.user.social_medias[0].social_media_link) + self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB') + self.assertEqual(users_json["socialMedias"][0]["username"], 'groot') + self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link) self.assertEqual(users_json["displayName"], self.user.display_name) def test_get_single_user_by_account_address(self): @@ -54,7 +56,9 @@ class TestAPI(BaseUserConfig): users_json = users_get_resp.json self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url) - self.assertEqual(users_json["socialMedias"][0]["socialMediaLink"], self.user.social_medias[0].social_media_link) + self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB') + self.assertEqual(users_json["socialMedias"][0]["username"], 'groot') + self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link) self.assertEqual(users_json["displayName"], self.user.display_name) def test_create_user_duplicate_400(self): diff --git a/contract/build/contracts/CrowdFundFactory.json b/contract/build/contracts/CrowdFundFactory.json index df48b963..651d41db 100644 --- a/contract/build/contracts/CrowdFundFactory.json +++ b/contract/build/contracts/CrowdFundFactory.json @@ -1565,8 +1565,14 @@ "links": {}, "address": "0x23de420265da56889af074254dd900bc888efbf6", "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" + }, + "1542657525387": { + "events": {}, + "links": {}, + "address": "0x355f1ceac11b3b41641657c24258f74cdd7a1f4b", + "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" } }, "schemaVersion": "2.0.1", - "updatedAt": "2018-11-16T20:37:00.160Z" + "updatedAt": "2018-11-19T19:59:35.976Z" } \ No newline at end of file diff --git a/e2e/cypress/integration/create.spec.ts b/e2e/cypress/integration/create.spec.ts index ad274e26..114cac06 100644 --- a/e2e/cypress/integration/create.spec.ts +++ b/e2e/cypress/integration/create.spec.ts @@ -28,13 +28,13 @@ describe("create proposal", () => { { name: "Alisha Endtoend", title: "QA Robot0", - ethAddress: `0x0000${randomEthHex}0000`, + accountAddress: `0x0000${randomEthHex}0000`, emailAddress: `qa.alisha.${id}@grant.io` }, { name: "Billy Endtoend", title: "QA Robot1", - ethAddress: `0x1111${randomEthHex}1111`, + accountAddress: `0x1111${randomEthHex}1111`, emailAddress: `qa.billy.${id}@grant.io` } ], @@ -79,7 +79,7 @@ describe("create proposal", () => { cy.get('.TeamMember-info input[name="name"]').type(proposal.team[0].name); cy.get('.TeamMember-info input[name="title"]').type(proposal.team[0].title); cy.get("@EthAccounts").then(accts => { - cy.get('.TeamMember-info input[name="ethAddress"]').type( + cy.get('.TeamMember-info input[name="accountAddress"]').type( accts[0].toString() ); }); @@ -94,7 +94,7 @@ describe("create proposal", () => { cy.get('.TeamMember-info input[name="name"]').type(proposal.team[1].name); cy.get('.TeamMember-info input[name="title"]').type(proposal.team[1].title); cy.get("@EthAccounts").then(accts => { - cy.get('.TeamMember-info input[name="ethAddress"]').type( + cy.get('.TeamMember-info input[name="accountAddress"]').type( accts[1].toString() ); }); diff --git a/frontend/client/components/Profile/ProfileEdit.tsx b/frontend/client/components/Profile/ProfileEdit.tsx index 81b71b9d..fc069aaa 100644 --- a/frontend/client/components/Profile/ProfileEdit.tsx +++ b/frontend/client/components/Profile/ProfileEdit.tsx @@ -1,7 +1,7 @@ import React from 'react'; import lodash from 'lodash'; import { Input, Form, Col, Row, Button, Icon, Alert } from 'antd'; -import { SOCIAL_INFO } from 'utils/social'; +import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social'; import { SOCIAL_SERVICE, User } from 'types'; import { UserState } from 'modules/users/reducers'; import { getCreateTeamMemberError } from 'modules/create/utils'; @@ -224,6 +224,7 @@ export default class ProfileEdit extends React.PureComponent { socialMedias.push({ service, username: value, + url: socialMediaToUrl(service, value), }); } @@ -245,7 +246,7 @@ export default class ProfileEdit extends React.PureComponent { const fields = { ...this.state.fields, avatar: { - image_url: `https://randomuser.me/api/portraits/${gender}/${num}.jpg`, + imageUrl: `https://randomuser.me/api/portraits/${gender}/${num}.jpg`, }, }; const isChanged = this.isChangedCheck(fields); diff --git a/frontend/client/components/Profile/ProfileUser.tsx b/frontend/client/components/Profile/ProfileUser.tsx index a660301b..cf775af6 100644 --- a/frontend/client/components/Profile/ProfileUser.tsx +++ b/frontend/client/components/Profile/ProfileUser.tsx @@ -6,7 +6,7 @@ import { usersActions } from 'modules/users'; import { UserState } from 'modules/users/reducers'; import ProfileEdit from './ProfileEdit'; import UserAvatar from 'components/UserAvatar'; -import { SOCIAL_INFO, socialMediaToUrl } from 'utils/social'; +import { SOCIAL_INFO } from 'utils/social'; import ShortAddress from 'components/ShortAddress'; import './ProfileUser.less'; import { AppState } from 'store/reducers'; @@ -97,7 +97,7 @@ class ProfileUser extends React.Component { const Social = ({ socialMedia }: { socialMedia: SocialMedia }) => { return ( - +
{SOCIAL_INFO[socialMedia.service].icon}
diff --git a/frontend/client/components/Profile/index.tsx b/frontend/client/components/Profile/index.tsx index 2dc7114e..f1424eab 100644 --- a/frontend/client/components/Profile/index.tsx +++ b/frontend/client/components/Profile/index.tsx @@ -80,7 +80,7 @@ class Profile extends React.Component { diff --git a/frontend/client/components/UserAvatar.tsx b/frontend/client/components/UserAvatar.tsx index 71028334..a3e41f45 100644 --- a/frontend/client/components/UserAvatar.tsx +++ b/frontend/client/components/UserAvatar.tsx @@ -9,8 +9,8 @@ interface Props { } const UserAvatar: React.SFC = ({ user, className }) => { - if (user.avatar && user.avatar.image_url) { - return ; + if (user.avatar && user.avatar.imageUrl) { + return ; } else if (user.accountAddress) { return ; } else { diff --git a/frontend/client/utils/api.ts b/frontend/client/utils/api.ts index 434afa87..ab9aabee 100644 --- a/frontend/client/utils/api.ts +++ b/frontend/client/utils/api.ts @@ -4,8 +4,8 @@ import { socialMediaToUrl } from 'utils/social'; export function formatUserForPost(user: User) { return { ...user, - avatar: user.avatar ? user.avatar.image_url : null, - socialMedias: user.socialMedias.map(socialMediaToUrl), + avatar: user.avatar ? user.avatar.imageUrl : null, + socialMedias: user.socialMedias.map(sm => socialMediaToUrl(sm.service, sm.username)), }; } diff --git a/frontend/client/utils/social.tsx b/frontend/client/utils/social.tsx index b7859474..b0a4ef2c 100644 --- a/frontend/client/utils/social.tsx +++ b/frontend/client/utils/social.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Icon } from 'antd'; import keybaseIcon from 'static/images/keybase.svg'; -import { SOCIAL_SERVICE, SocialMedia, SocialInfo } from 'types'; +import { SOCIAL_SERVICE, SocialInfo } from 'types'; const accountNameRegex = '([a-zA-Z0-9-_]*)'; export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = { @@ -31,6 +31,6 @@ export const SOCIAL_INFO: { [key in SOCIAL_SERVICE]: SocialInfo } = { }, }; -export function socialMediaToUrl(sm: SocialMedia): string { - return SOCIAL_INFO[sm.service].format.replace(accountNameRegex, sm.username); +export function socialMediaToUrl(service: SOCIAL_SERVICE, username: string): string { + return SOCIAL_INFO[service].format.replace(accountNameRegex, username); } diff --git a/frontend/stories/UserRow.story.tsx b/frontend/stories/UserRow.story.tsx index 029c3d97..71d64f60 100644 --- a/frontend/stories/UserRow.story.tsx +++ b/frontend/stories/UserRow.story.tsx @@ -12,7 +12,7 @@ const user: User = { displayName: 'Dana Hayes', title: 'QA Engineer', avatar: { - image_url: 'https://randomuser.me/api/portraits/women/19.jpg', + imageUrl: 'https://randomuser.me/api/portraits/women/19.jpg', }, accountAddress: DONATION.ETH, emailAddress: 'test@test.test', diff --git a/frontend/types/social.ts b/frontend/types/social.ts index 4c99cec2..f585d04a 100644 --- a/frontend/types/social.ts +++ b/frontend/types/social.ts @@ -3,6 +3,7 @@ import React from 'react'; export type SocialAccountMap = Partial<{ [key in SOCIAL_SERVICE]: string }>; export interface SocialMedia { + url: string; service: SOCIAL_SERVICE; username: string; } diff --git a/frontend/types/user.ts b/frontend/types/user.ts index 15467da5..cfd42221 100644 --- a/frontend/types/user.ts +++ b/frontend/types/user.ts @@ -7,5 +7,5 @@ export interface User { displayName: string; title: string; socialMedias: SocialMedia[]; - avatar: { image_url: string } | null; + avatar: { imageUrl: string } | null; } From fcf13deea15a36f9dd04dcff97457474972bf50f Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Mon, 19 Nov 2018 15:40:21 -0500 Subject: [PATCH 28/32] Fix tsc --- frontend/client/components/Comment/index.tsx | 2 +- frontend/client/components/CreateFlow/index.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/client/components/Comment/index.tsx b/frontend/client/components/Comment/index.tsx index e458a12f..e5ed90bc 100644 --- a/frontend/client/components/Comment/index.tsx +++ b/frontend/client/components/Comment/index.tsx @@ -55,7 +55,7 @@ class Comment extends React.Component {
{/*
*/} -
{comment.author.username}
+
{comment.author.displayName}
{moment(comment.dateCreated).fromNow()}
diff --git a/frontend/client/components/CreateFlow/index.tsx b/frontend/client/components/CreateFlow/index.tsx index a84b6e59..2e1daad9 100644 --- a/frontend/client/components/CreateFlow/index.tsx +++ b/frontend/client/components/CreateFlow/index.tsx @@ -142,6 +142,7 @@ class CreateFlow extends React.Component { isPreviewing: false, isPublishing: false, isExample: false, + isShowingPublishWarning: false, }; this.debouncedUpdateForm = debounce(this.updateForm, 800); this.historyUnlisten = this.props.history.listen(this.handlePop); From fb4b31c978113d6e1c917ed2a0ed236fec3d1490 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Mon, 19 Nov 2018 15:48:45 -0500 Subject: [PATCH 29/32] Restore contract files. --- contract/build/contracts/CrowdFund.json | 6654 +++++++++-------- .../build/contracts/CrowdFundFactory.json | 412 +- 2 files changed, 3565 insertions(+), 3501 deletions(-) diff --git a/contract/build/contracts/CrowdFund.json b/contract/build/contracts/CrowdFund.json index 023b2d15..86613203 100644 --- a/contract/build/contracts/CrowdFund.json +++ b/contract/build/contracts/CrowdFund.json @@ -525,20 +525,20 @@ "type": "function" } ], - "bytecode": "0x60806040523480156200001157600080fd5b50604051620032e0380380620032e0833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ad7179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c43806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029", - "deployedBytecode": "0x608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029", - "sourceMap": "87:12687:0:-;;;1437:1931;8:9:-1;5:2;;;30:1;27;20:12;5:2;1437:1931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2194:19;2232:6;2287:20;1711:7;1697:10;:21;;1689:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1;1775:9;:16;:21;;:47;;;;;1820:2;1800:9;:16;:22;;1775:47;1767:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1924:1;1902:11;:18;:23;;:51;;;;;1951:2;1929:11;:18;:24;;1902:51;1894:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:1;2194:23;;2241:1;2232:10;;2227:477;2248:11;:18;2244:1;:22;2227:477;;;2310:11;2322:1;2310:14;;;;;;;;;;;;;;;;;;2287:37;;2364:1;2346:15;:19;2338:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2440:35;2459:15;2440:14;:18;;;;;;:35;;;;;:::i;:::-;2423:52;;2489:10;2505:187;;;;;;;;;2541:15;2505:187;;;;2647:1;2505:187;;;;2601:1;2505:187;;;;2672:5;2505:187;;;;;2489:204;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2489:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:3;;;;;;;2227:477;;;2739:10;2721:14;:28;2713:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:1;2878:25;:29;;;;2929:10;2917:9;:22;;;;2963:12;2949:11;;:26;;;;;;;;;;;;;;;;;;2996:9;2985:8;:20;;;;;;;;;;;;:::i;:::-;;3032:9;3026:3;:15;3015:8;:26;;;;3075:22;3051:21;:46;;;;3139:30;3107:29;;:62;;;;;;;;;;;;;;;;;;3200:5;3179:18;;:26;;;;;;;;;;;;;;;;;;3239:1;3215:21;:25;;;;3259:5;3250:6;;:14;;;;;;;;;;;;;;;;;;3360:1;3345:12;:16;;;;1437:1931;;;;;;;;;;87:12687;;1238:128:2;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;87:12687:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", - "deployedSourceMap": "87:12687:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;776:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1079:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:33:0;;;;;;;;;;;;;;;;;;;;;;;1150:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1150:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11235:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11235:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1005:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1005:25:0;;;;;;;;;;;;;;;;;;;;;;;922:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;922:20:0;;;;;;;;;;;;;;;;;;;;;;;6712:1029;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6712:1029:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:37:0;;;;;;;;;;;;;;;;;;;;;;;1118:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1118:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11101:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11101:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10040:587;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10040:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9271:693;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9271:693:0;;;;;;8714:551;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8714:551:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1302:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11799:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11799:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;975:24:0;;;;;;;;;;;;;;;;;;;;;;;10724:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10724:371:0;;;;;;11590:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11590:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5068:1638;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5068:1638:0;;;;;;;;;;;;;;;;;;;;;;;;;;883:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;883:33:0;;;;;;;;;;;;;;;;;;;;;;;7747:961;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7747:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;1207:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1207:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;948:21:0;;;;;;;;;;;;;;;;;;;;;;;11977:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11977:96:0;;;;;;;;;;;;;;;;;;;;;;;3374:1688;;;;;;800:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;800:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;836:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1401:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1401:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11475:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11475:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;;;;;;;;;;;;:::o;1079:33::-;;;;:::o;1150:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11235:234::-;11283:4;11304:6;11313:1;11304:10;;11299:142;11320:8;:15;;;;11316:1;:19;11299:142;;;11374:8;11383:1;11374:11;;;;;;;;;;;;;;;;;;;;;;;;;;;11360:25;;:10;:25;;;11356:75;;;11412:4;11405:11;;;;11356:75;11337:3;;;;;;;11299:142;;;11457:5;11450:12;;11235:234;;;:::o;1005:25::-;;;;:::o;922:20::-;;;;:::o;6712:1029::-;6821:28;7017:27;7104:23;7190:16;12610:1;12563:12;:24;12576:10;12563:24;;;;;;;;;;;;;;;:43;;;:48;;12555:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6852:12;:24;6865:10;6852:24;;;;;;;;;;;;;;;:41;;6894:5;6852:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6821:79;;6945:4;6918:31;;:23;:31;;;;6910:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7093:1;7047:10;7058:5;7047:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;7017:77;;7177:3;7130:10;7141:5;7130:17;;;;;;;;;;;;;;;;;;;;:43;;;:50;;7104:76;;7209:22;:45;;;;;7236:18;7235:19;7209:45;7190:64;;7272:11;7264:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7378:4;7327:12;:24;7340:10;7327:24;;;;;;;;;;;;;;;:41;;7369:5;7327:48;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;7397:4;7396:5;7392:343;;;7463:92;7511:12;:24;7524:10;7511:24;;;;;;;;;;;;;;;:43;;;7463:10;7474:5;7463:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7417:10;7428:5;7417:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7392:343;;;7632:92;7680:12;:24;7693:10;7680:24;;;;;;;;;;;;;;;:43;;;7632:10;7643:5;7632:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7586:10;7597:5;7586:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7392:343;6712:1029;;;;;;:::o;1036:37::-;;;;:::o;1118:26::-;;;;;;;;;;;;;:::o;11101:128::-;11166:4;11210:12;;11189:18;11205:1;11189:11;:15;;:18;;;;:::i;:::-;:33;11182:40;;11101:128;;;:::o;10040:587::-;10161:15;10349:23;10431:19;12119:6;;;;;;;;;;;12111:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10117:6;;;;;;;;;;;10109:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10179:12;:27;10192:13;10179:27;;;;;;;;;;;;;;;:36;;;;;;;;;;;;10161:54;;10234:10;10233:11;10225:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10335:4;10296:12;:27;10309:13;10296:27;;;;;;;;;;;;;;;:36;;;:43;;;;;;;;;;;;;;;;;;10375:12;:27;10388:13;10375:27;;;;;;;;;;;;;;;:46;;;10349:72;;10453:64;10503:13;;10453:45;10484:4;10476:21;;;10453:18;:22;;:45;;;;:::i;:::-;:49;;:64;;;;:::i;:::-;10431:86;;10527:13;:22;;:38;10550:14;10527:38;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10527:38:0;10590:13;10580:40;;;10605:14;10580:40;;;;;;;;;;;;;;;;;;10040:587;;;;:::o;9271:693::-;9319:20;9369;9412:27;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9342:17;:15;:17::i;:::-;9319:40;;9392:10;:8;:10::i;:::-;9369:33;;9442:39;9459:21;;9442:16;:39::i;:::-;9412:69;;9499:15;:34;;;;9518:15;9499:34;:60;;;;9537:22;9499:60;9491:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9620:15;9616:272;;;9666:30;9651:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9616:272;;;9717:15;9713:175;;;9763:30;9748:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9713:175;;;9839:38;9824:12;;:53;;;;;;;;;;;;;;;;;;;;;;;;9713:175;9616:272;9906:4;9897:6;;:13;;;;;;;;;;;;;;;;;;9944:4;9936:21;;;9920:13;:37;;;;9271:693;;;:::o;8714:551::-;8802:15;12610:1;12563:12;:24;12576:10;12563:24;;;;;;;;;;;;;;;:43;;;:48;;12555:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8820:12;:24;8833:10;8820:24;;;;;;;;;;;;;;;:35;;;;;;;;;;;;8802:53;;8881:10;8873:18;;:4;:18;;;;8865:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8990:4;8952:12;:24;8965:10;8952:24;;;;;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;9009:4;9008:5;9004:255;;;9053:70;9079:12;:24;9092:10;9079:24;;;;;;;;;;;;;;;:43;;;9053:21;;:25;;:70;;;;:::i;:::-;9029:21;:94;;;;9004:255;;;9178:70;9204:12;:24;9217:10;9204:24;;;;;;;;;;;;;;;:43;;;9178:21;;:25;;:70;;;;:::i;:::-;9154:21;:94;;;;9004:255;8714:551;;:::o;1302:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11799:172::-;11890:4;11913:12;:32;11926:18;11913:32;;;;;;;;;;;;;;;:51;;;11906:58;;11799:172;;;:::o;975:24::-;;;;:::o;10724:371::-;10788:6;10847:26;12708:17;:15;:17::i;:::-;12700:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12119:6;;;;;;;;;;;12111:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10797:1;10788:10;;10783:271;10804:15;:22;;;;10800:1;:26;10783:271;;;10876:15;10892:1;10876:18;;;;;;;;;;;;;;;;;;;;;;;;;;;10847:47;;10913:12;:32;10926:18;10913:32;;;;;;;;;;;;;;;:41;;;;;;;;;;;;10912:42;10908:136;;;10974:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10908:136;10828:3;;;;;;;10783:271;;;11076:11;;;;;;;;;;;11063:25;;;11590:203;11697:4;11721:12;:32;11734:18;11721:32;;;;;;;;;;;;;;;:49;;11771:14;11721:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11714:72;;11590:203;;;;:::o;5068:1638::-;5166:25;5226:26;5314;5527:19;5566:6;12708:17;:15;:17::i;:::-;12700:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:10;5205:5;5194:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;5166:50;;5301:3;5255:10;5266:5;5255:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;5226:78;;5343:61;5360:10;5371:5;5360:17;;;;;;;;;;;;;;;;;;;;:43;;;5343:16;:61::i;:::-;5314:90;;5469:20;5468:21;5460:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5549:2;5527:24;;5575:1;5566:10;;5561:150;5582:10;:17;;;;5578:1;:21;5561:150;;;5624:10;5635:1;5624:13;;;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;5620:81;;;5684:1;5662:24;;5620:81;5601:3;;;;;;;5561:150;;;5761:1;5743:15;:19;5729:5;:34;5721:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5959:1;5912:10;5923:5;5912:17;;;;;;;;;;;;;;;;;;;;:43;;;:48;5908:792;;;5989:1;5980:5;:10;:43;;;;;5994:29;;;;;;;;;;;5980:43;5976:395;;;6240:1;6194:10;6205:5;6194:17;;;;;;;;;;;;;;;;;;;;:43;;:47;;;;5976:395;;;6326:30;6334:21;;6326:3;:7;;:30;;;;:::i;:::-;6280:10;6291:5;6280:17;;;;;;;;;;;;;;;;;;;;:43;;:76;;;;5976:395;5908:792;;;6544:21;:46;;;;;6569:21;6544:46;6540:160;;;6652:37;6660:28;6686:1;6660:21;;:25;;:28;;;;:::i;:::-;6652:3;:7;;:37;;;;:::i;:::-;6606:10;6617:5;6606:17;;;;;;;;;;;;;;;;;;;;:43;;:83;;;;6540:160;5908:792;5068:1638;;;;;;:::o;883:33::-;;;;:::o;7747:961::-;7828:26;7916:20;8010:25;8199:11;12314:18;;;;;;;;;;;12306:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7903:3;7857:10;7868:5;7857:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;7828:78;;7939:61;7956:10;7967:5;7956:17;;;;;;;;;;;;;;;;;;;;:43;;;7939:16;:61::i;:::-;7916:84;;8038:10;8049:5;8038:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;8010:50;;8074:21;:41;;;;;8100:15;8099:16;8074:41;:66;;;;;8120:20;8119:21;8074:66;8070:632;;;8181:4;8156:10;8167:5;8156:17;;;;;;;;;;;;;;;;;;;;:22;;;:29;;;;;;;;;;;;;;;;;;8213:10;8224:5;8213:17;;;;;;;;;;;;;;;;;;;;:24;;;8199:38;;8251:11;;;;;;;;;;;:20;;:28;8272:6;8251:28;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8251:28:0;8308:11;;;;;;;;;;;8298:30;;;8321:6;8298:30;;;;;;;;;;;;;;;;;;8430:1;8398:28;8420:5;8398:10;:17;;;;:21;;:28;;;;:::i;:::-;:33;8394:219;;;8586:11;;;;;;;;;;;8573:25;;;8394:219;8070:632;;;8643:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8070:632;7747:961;;;;;:::o;1207:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;948:21::-;;;;:::o;11977:96::-;12025:4;12053:12;;;;;;;;;;;12048:18;;;;;;;;12041:25;;11977:96;:::o;3374:1688::-;3481:20;4050:23;4124:21;12434:8;;12427:3;:15;;:38;;;;;12447:18;;;;;;;;;;;12446:19;12427:38;12419:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12220:6;;;;;;;;;;;12219:7;12211:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:27;3521:9;3504:12;;:16;;:27;;;;:::i;:::-;3481:50;;3568:9;;3549:15;:28;;3541:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4089:25;;4076:9;:38;;4050:64;;4167:9;;4148:15;:28;4124:52;;4194:18;:38;;;;4216:16;4194:38;4186:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:1;4380:12;:24;4393:10;4380:24;;;;;;;;;;;;;;;:43;;;:48;4376:502;;;4471:207;;;;;;;;;4521:9;4471:207;;;;4577:10;:17;;;;4566:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;4566:29:0;;;;4471:207;;;;4625:5;4471:207;;;;;;4658:5;4471:207;;;;;4444:12;:24;4457:10;4444:24;;;;;;;;;;;;;;;:234;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4692:15;4713:10;4692:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4692:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:502;;;4809:58;4857:9;4809:12;:24;4822:10;4809:24;;;;;;;;;;;;;;;:43;;;:47;;:58;;;;:::i;:::-;4763:12;:24;4776:10;4763:24;;;;;;;;;;;;;;;:43;;:104;;;;4376:502;4903:15;4888:12;:30;;;;4948:9;;4932:12;;:25;4928:81;;;4994:4;4973:18;;:25;;;;;;;;;;;;;;;;;;4928:81;5033:10;5023:32;;;5045:9;5023:32;;;;;;;;;;;;;;;;;;3374:1688;;;:::o;800:30::-;;;;;;;;;;;;;:::o;836:41::-;;;;;;;;;;;;;:::o;1401:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11475:109::-;11516:4;11546:8;;11539:3;:15;;:38;;;;;11559:18;;;;;;;;;;;11558:19;11539:38;11532:45;;11475:109;:::o;1060:116:2:-;1120:7;1148:2;1142;:8;;1135:16;;;;;;1169:2;1164;:7;1157:14;;1060:116;;;;:::o;1238:128::-;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;203:380::-;263:9;495:1;489:2;:7;485:36;;;513:1;506:8;;;;485:36;536:2;531;:7;527:11;;561:2;555;551:1;:6;;;;;;;;:12;544:20;;;;;;577:1;570:8;;203:380;;;;;:::o;665:283::-;725:7;941:2;936;:7;;;;;;;;929:14;;665:283;;;;:::o;87:12687:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", - "source": "pragma solidity ^0.4.24;\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n\ncontract CrowdFund {\n using SafeMath for uint256;\n\n enum FreezeReason {\n CALLER_IS_TRUSTEE,\n CROWD_FUND_FAILED,\n MAJORITY_VOTING_TO_REFUND\n }\n\n FreezeReason freezeReason;\n\n struct Milestone {\n uint amount;\n uint amountVotingAgainstPayout;\n uint payoutRequestVoteDeadline;\n bool paid;\n }\n\n struct Contributor {\n uint contributionAmount;\n // array index bool reflect milestone index vote\n bool[] milestoneNoVotes;\n bool refundVote;\n bool refunded;\n }\n\n event Deposited(address indexed payee, uint256 weiAmount);\n event Withdrawn(address indexed payee, uint256 weiAmount);\n\n bool public frozen;\n bool public isRaiseGoalReached;\n bool public immediateFirstMilestonePayout;\n uint public milestoneVotingPeriod;\n uint public deadline;\n uint public raiseGoal;\n uint public amountRaised;\n uint public frozenBalance;\n uint public minimumContributionAmount;\n uint public amountVotingForRefund;\n address public beneficiary;\n mapping(address => Contributor) public contributors;\n address[] public contributorList;\n // authorized addresses to ask for milestone payouts\n address[] public trustees;\n // constructor ensures that all values combined equal raiseGoal\n Milestone[] public milestones;\n\n constructor(\n uint _raiseGoal,\n address _beneficiary,\n address[] _trustees,\n uint[] _milestones,\n uint _deadline,\n uint _milestoneVotingPeriod,\n bool _immediateFirstMilestonePayout)\n public {\n require(_raiseGoal >= 1 ether, \"Raise goal is smaller than 1 ether\");\n require(_trustees.length >= 1 && _trustees.length <= 10, \"Trustee addresses must be at least 1 and not more than 10\");\n require(_milestones.length >= 1 && _milestones.length <= 10, \"Milestones must be at least 1 and not more than 10\");\n // TODO - require minimum duration\n // TODO - require minimum milestone voting period\n\n // ensure that cumalative milestone payouts equal raiseGoalAmount\n uint milestoneTotal = 0;\n for (uint i = 0; i < _milestones.length; i++) {\n uint milestoneAmount = _milestones[i];\n require(milestoneAmount > 0, \"Milestone amount must be greater than 0\");\n milestoneTotal = milestoneTotal.add(milestoneAmount);\n milestones.push(Milestone({\n amount: milestoneAmount,\n payoutRequestVoteDeadline: 0,\n amountVotingAgainstPayout: 0,\n paid: false\n }));\n }\n require(milestoneTotal == _raiseGoal, \"Milestone total must equal raise goal\");\n // TODO - increase minimum contribution amount is 0.1% of raise goal\n minimumContributionAmount = 1;\n raiseGoal = _raiseGoal;\n beneficiary = _beneficiary;\n trustees = _trustees;\n deadline = now + _deadline;\n milestoneVotingPeriod = _milestoneVotingPeriod;\n immediateFirstMilestonePayout = _immediateFirstMilestonePayout;\n isRaiseGoalReached = false;\n amountVotingForRefund = 0;\n frozen = false;\n // assumes no ether contributed as part of contract deployment\n amountRaised = 0;\n }\n\n function contribute() public payable onlyOnGoing onlyUnfrozen {\n // don't allow overfunding\n uint newAmountRaised = amountRaised.add(msg.value);\n require(newAmountRaised <= raiseGoal, \"Contribution exceeds the raise goal.\");\n // require minimumContributionAmount (set during construction)\n // there may be a special case where just enough has been raised so that the remaining raise amount is just smaller than the minimumContributionAmount\n // in this case, allow that the msg.value + amountRaised will equal the raiseGoal.\n // This makes sure that we don't enter a scenario where a proposal can never be fully funded\n bool greaterThanMinimum = msg.value >= minimumContributionAmount;\n bool exactlyRaiseGoal = newAmountRaised == raiseGoal;\n require(greaterThanMinimum || exactlyRaiseGoal, \"msg.value greater than minimum, or msg.value == remaining amount to be raised\");\n // in cases where an address pays > 1 times\n if (contributors[msg.sender].contributionAmount == 0) {\n contributors[msg.sender] = Contributor({\n contributionAmount: msg.value,\n milestoneNoVotes: new bool[](milestones.length),\n refundVote: false,\n refunded: false\n });\n contributorList.push(msg.sender);\n }\n else {\n contributors[msg.sender].contributionAmount = contributors[msg.sender].contributionAmount.add(msg.value);\n }\n\n amountRaised = newAmountRaised;\n if (amountRaised == raiseGoal) {\n isRaiseGoalReached = true;\n }\n emit Deposited(msg.sender, msg.value);\n }\n\n function requestMilestonePayout (uint index) public onlyTrustee onlyRaised onlyUnfrozen {\n bool milestoneAlreadyPaid = milestones[index].paid;\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline > now;\n bool majorityAgainstPayout = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n // prevent requesting paid milestones\n require(!milestoneAlreadyPaid, \"Milestone already paid\");\n\n int lowestIndexPaid = -1;\n for (uint i = 0; i < milestones.length; i++) {\n if (milestones[i].paid) {\n lowestIndexPaid = int(i);\n }\n }\n\n require(index == uint(lowestIndexPaid + 1), \"Milestone request must be for first unpaid milestone\");\n // begin grace period for contributors to vote no on milestone payout\n if (milestones[index].payoutRequestVoteDeadline == 0) {\n if (index == 0 && immediateFirstMilestonePayout) {\n // make milestone payouts immediately avtheailable for the first milestone if immediateFirstMilestonePayout is set during consutrction\n milestones[index].payoutRequestVoteDeadline = 1;\n } else {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod);\n }\n }\n // if the payoutRequestVoteDealine has passed and majority voted against it previously, begin the grace period with 2 times the deadline\n else if (voteDeadlineHasPassed && majorityAgainstPayout) {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod.mul(2));\n }\n }\n\n function voteMilestonePayout(uint index, bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool existingMilestoneNoVote = contributors[msg.sender].milestoneNoVotes[index];\n require(existingMilestoneNoVote != vote, \"Vote value must be different than existing vote state\");\n bool milestoneVotingStarted = milestones[index].payoutRequestVoteDeadline > 0;\n bool votePeriodHasEnded = milestones[index].payoutRequestVoteDeadline <= now;\n bool onGoingVote = milestoneVotingStarted && !votePeriodHasEnded;\n require(onGoingVote, \"Milestone voting must be open\");\n contributors[msg.sender].milestoneNoVotes[index] = vote;\n if (!vote) {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.sub(contributors[msg.sender].contributionAmount);\n } else {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function payMilestonePayout(uint index) public onlyRaised onlyUnfrozen {\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline < now;\n bool majorityVotedNo = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n bool milestoneAlreadyPaid = milestones[index].paid;\n if (voteDeadlineHasPassed && !majorityVotedNo && !milestoneAlreadyPaid) {\n milestones[index].paid = true;\n uint amount = milestones[index].amount;\n beneficiary.transfer(amount);\n emit Withdrawn(beneficiary, amount);\n // if the final milestone just got paid\n if (milestones.length.sub(index) == 1) {\n // useful to selfdestruct in case funds were forcefully deposited into contract. otherwise they are lost.\n selfdestruct(beneficiary);\n }\n } else {\n revert(\"required conditions were not satisfied\");\n }\n }\n\n function voteRefund(bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool refundVote = contributors[msg.sender].refundVote;\n require(vote != refundVote, \"Existing vote state is identical to vote value\");\n contributors[msg.sender].refundVote = vote;\n if (!vote) {\n amountVotingForRefund = amountVotingForRefund.sub(contributors[msg.sender].contributionAmount);\n } else {\n amountVotingForRefund = amountVotingForRefund.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function refund() public onlyUnfrozen {\n bool callerIsTrustee = isCallerTrustee();\n bool crowdFundFailed = isFailed();\n bool majorityVotingToRefund = isMajorityVoting(amountVotingForRefund);\n require(callerIsTrustee || crowdFundFailed || majorityVotingToRefund, \"Required conditions for refund are not met\");\n if (callerIsTrustee) {\n freezeReason = FreezeReason.CALLER_IS_TRUSTEE;\n } else if (crowdFundFailed) {\n freezeReason = FreezeReason.CROWD_FUND_FAILED;\n } else {\n freezeReason = FreezeReason.MAJORITY_VOTING_TO_REFUND;\n }\n frozen = true;\n frozenBalance = address(this).balance;\n }\n\n // anyone can refund a contributor if a crowdfund has been frozen\n function withdraw(address refundAddress) public onlyFrozen {\n require(frozen, \"CrowdFund is not frozen\");\n bool isRefunded = contributors[refundAddress].refunded;\n require(!isRefunded, \"Specified address is already refunded\");\n contributors[refundAddress].refunded = true;\n uint contributionAmount = contributors[refundAddress].contributionAmount;\n uint amountToRefund = contributionAmount.mul(address(this).balance).div(frozenBalance);\n refundAddress.transfer(amountToRefund);\n emit Withdrawn(refundAddress, amountToRefund);\n }\n\n // it may be useful to selfdestruct in case funds were force deposited to the contract\n function destroy() public onlyTrustee onlyFrozen {\n for (uint i = 0; i < contributorList.length; i++) {\n address contributorAddress = contributorList[i];\n if (!contributors[contributorAddress].refunded) {\n revert(\"At least one contributor has not yet refunded\");\n }\n }\n selfdestruct(beneficiary);\n }\n\n function isMajorityVoting(uint valueVoting) public view returns (bool) {\n return valueVoting.mul(2) > amountRaised;\n }\n\n function isCallerTrustee() public view returns (bool) {\n for (uint i = 0; i < trustees.length; i++) {\n if (msg.sender == trustees[i]) {\n return true;\n }\n }\n return false;\n }\n\n function isFailed() public view returns (bool) {\n return now >= deadline && !isRaiseGoalReached;\n }\n\n function getContributorMilestoneVote(address contributorAddress, uint milestoneIndex) public view returns (bool) { \n return contributors[contributorAddress].milestoneNoVotes[milestoneIndex];\n }\n\n function getContributorContributionAmount(address contributorAddress) public view returns (uint) {\n return contributors[contributorAddress].contributionAmount;\n }\n\n function getFreezeReason() public view returns (uint) {\n return uint(freezeReason);\n }\n\n modifier onlyFrozen() {\n require(frozen, \"CrowdFund is not frozen\");\n _;\n }\n\n modifier onlyUnfrozen() {\n require(!frozen, \"CrowdFund is frozen\");\n _;\n }\n\n modifier onlyRaised() {\n require(isRaiseGoalReached, \"Raise goal is not reached\");\n _;\n }\n\n modifier onlyOnGoing() {\n require(now <= deadline && !isRaiseGoalReached, \"CrowdFund is not ongoing\");\n _;\n }\n\n modifier onlyContributor() {\n require(contributors[msg.sender].contributionAmount != 0, \"Caller is not a contributor\");\n _;\n }\n\n modifier onlyTrustee() {\n require(isCallerTrustee(), \"Caller is not a trustee\");\n _;\n }\n\n}\n", - "sourcePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620032ee380380620032ee833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ae5179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c51806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029", + "deployedBytecode": "0x608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029", + "sourceMap": "87:12715:0:-;;;1437:1931;8:9:-1;5:2;;;30:1;27;20:12;5:2;1437:1931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2194:19;2232:6;2287:20;1711:7;1697:10;:21;;1689:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1795:1;1775:9;:16;:21;;:47;;;;;1820:2;1800:9;:16;:22;;1775:47;1767:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1924:1;1902:11;:18;:23;;:51;;;;;1951:2;1929:11;:18;:24;;1902:51;1894:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:1;2194:23;;2241:1;2232:10;;2227:477;2248:11;:18;2244:1;:22;2227:477;;;2310:11;2322:1;2310:14;;;;;;;;;;;;;;;;;;2287:37;;2364:1;2346:15;:19;2338:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2440:35;2459:15;2440:14;:18;;;;;;:35;;;;;:::i;:::-;2423:52;;2489:10;2505:187;;;;;;;;;2541:15;2505:187;;;;2647:1;2505:187;;;;2601:1;2505:187;;;;2672:5;2505:187;;;;;2489:204;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;2489:204:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:3;;;;;;;2227:477;;;2739:10;2721:14;:28;2713:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2906:1;2878:25;:29;;;;2929:10;2917:9;:22;;;;2963:12;2949:11;;:26;;;;;;;;;;;;;;;;;;2996:9;2985:8;:20;;;;;;;;;;;;:::i;:::-;;3032:9;3026:3;:15;3015:8;:26;;;;3075:22;3051:21;:46;;;;3139:30;3107:29;;:62;;;;;;;;;;;;;;;;;;3200:5;3179:18;;:26;;;;;;;;;;;;;;;;;;3239:1;3215:21;:25;;;;3259:5;3250:6;;:14;;;;;;;;;;;;;;;;;;3360:1;3345:12;:16;;;;1437:1931;;;;;;;;;;87:12715;;1238:128:2;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;87:12715:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;", + "deployedSourceMap": "87:12715:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;776:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1079:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1079:33:0;;;;;;;;;;;;;;;;;;;;;;;1150:51;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1150:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11263:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11263:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1005:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1005:25:0;;;;;;;;;;;;;;;;;;;;;;;922:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;922:20:0;;;;;;;;;;;;;;;;;;;;;;;6712:1039;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6712:1039:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1036:37;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1036:37:0;;;;;;;;;;;;;;;;;;;;;;;1118:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1118:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;11129:128;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11129:128:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10068:587;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10068:587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9299:693;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9299:693:0;;;;;;8724:569;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8724:569:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1302:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1302:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11827:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11827:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;975:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;975:24:0;;;;;;;;;;;;;;;;;;;;;;;10752:371;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10752:371:0;;;;;;11618:203;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11618:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5068:1638;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5068:1638:0;;;;;;;;;;;;;;;;;;;;;;;;;;883:33;;8:9:-1;5:2;;;30:1;27;20:12;5:2;883:33:0;;;;;;;;;;;;;;;;;;;;;;;7757:961;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7757:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;1207:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1207:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;948:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;948:21:0;;;;;;;;;;;;;;;;;;;;;;;12005:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12005:96:0;;;;;;;;;;;;;;;;;;;;;;;3374:1688;;;;;;800:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;800:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;836:41;;8:9:-1;5:2;;;30:1;27;20:12;5:2;836:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;1401:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1401:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11503:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11503:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;776:18;;;;;;;;;;;;;:::o;1079:33::-;;;;:::o;1150:51::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11263:234::-;11311:4;11332:6;11341:1;11332:10;;11327:142;11348:8;:15;;;;11344:1;:19;11327:142;;;11402:8;11411:1;11402:11;;;;;;;;;;;;;;;;;;;;;;;;;;;11388:25;;:10;:25;;;11384:75;;;11440:4;11433:11;;;;11384:75;11365:3;;;;;;;11327:142;;;11485:5;11478:12;;11263:234;;;:::o;1005:25::-;;;;:::o;922:20::-;;;;:::o;6712:1039::-;6821:28;7017:27;7104:23;7190:16;12638:1;12591:12;:24;12604:10;12591:24;;;;;;;;;;;;;;;:43;;;:48;;12583:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6852:12;:24;6865:10;6852:24;;;;;;;;;;;;;;;:41;;6894:5;6852:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6821:79;;6945:4;6918:31;;:23;:31;;;;6910:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7093:1;7047:10;7058:5;7047:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;7017:77;;7177:3;7130:10;7141:5;7130:17;;;;;;;;;;;;;;;;;;;;:43;;;:50;;7104:76;;7209:22;:45;;;;;7236:18;7235:19;7209:45;7190:64;;7272:11;7264:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7378:4;7327:12;:24;7340:10;7327:24;;;;;;;;;;;;;;;:41;;7369:5;7327:48;;;;;;;;;;;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;7397:4;7396:5;7392:353;;;7463:92;7511:12;:24;7524:10;7511:24;;;;;;;;;;;;;;;:43;;;7463:10;7474:5;7463:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7417:10;7428:5;7417:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7392:353;;;7576:4;7572:173;;;7642:92;7690:12;:24;7703:10;7690:24;;;;;;;;;;;;;;;:43;;;7642:10;7653:5;7642:17;;;;;;;;;;;;;;;;;;;;:43;;;:47;;:92;;;;:::i;:::-;7596:10;7607:5;7596:17;;;;;;;;;;;;;;;;;;;;:43;;:138;;;;7572:173;7392:353;6712:1039;;;;;;:::o;1036:37::-;;;;:::o;1118:26::-;;;;;;;;;;;;;:::o;11129:128::-;11194:4;11238:12;;11217:18;11233:1;11217:11;:15;;:18;;;;:::i;:::-;:33;11210:40;;11129:128;;;:::o;10068:587::-;10189:15;10377:23;10459:19;12147:6;;;;;;;;;;;12139:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10145:6;;;;;;;;;;;10137:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10207:12;:27;10220:13;10207:27;;;;;;;;;;;;;;;:36;;;;;;;;;;;;10189:54;;10262:10;10261:11;10253:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10363:4;10324:12;:27;10337:13;10324:27;;;;;;;;;;;;;;;:36;;;:43;;;;;;;;;;;;;;;;;;10403:12;:27;10416:13;10403:27;;;;;;;;;;;;;;;:46;;;10377:72;;10481:64;10531:13;;10481:45;10512:4;10504:21;;;10481:18;:22;;:45;;;;:::i;:::-;:49;;:64;;;;:::i;:::-;10459:86;;10555:13;:22;;:38;10578:14;10555:38;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10555:38:0;10618:13;10608:40;;;10633:14;10608:40;;;;;;;;;;;;;;;;;;10068:587;;;;:::o;9299:693::-;9347:20;9397;9440:27;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9370:17;:15;:17::i;:::-;9347:40;;9420:10;:8;:10::i;:::-;9397:33;;9470:39;9487:21;;9470:16;:39::i;:::-;9440:69;;9527:15;:34;;;;9546:15;9527:34;:60;;;;9565:22;9527:60;9519:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9648:15;9644:272;;;9694:30;9679:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9644:272;;;9745:15;9741:175;;;9791:30;9776:12;;:45;;;;;;;;;;;;;;;;;;;;;;;;9741:175;;;9867:38;9852:12;;:53;;;;;;;;;;;;;;;;;;;;;;;;9741:175;9644:272;9934:4;9925:6;;:13;;;;;;;;;;;;;;;;;;9972:4;9964:21;;;9948:13;:37;;;;9299:693;;;:::o;8724:569::-;8812:15;12638:1;12591:12;:24;12604:10;12591:24;;;;;;;;;;;;;;;:43;;;:48;;12583:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8830:12;:24;8843:10;8830:24;;;;;;;;;;;;;;;:35;;;;;;;;;;;;8812:53;;8891:10;8883:18;;:4;:18;;;;8875:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9000:4;8962:12;:24;8975:10;8962:24;;;;;;;;;;;;;;;:35;;;:42;;;;;;;;;;;;;;;;;;9019:4;9018:5;9014:273;;;9063:70;9089:12;:24;9102:10;9089:24;;;;;;;;;;;;;;;:43;;;9063:21;;:25;;:70;;;;:::i;:::-;9039:21;:94;;;;9014:273;;;9162:4;9158:129;;;9206:70;9232:12;:24;9245:10;9232:24;;;;;;;;;;;;;;;:43;;;9206:21;;:25;;:70;;;;:::i;:::-;9182:21;:94;;;;9158:129;9014:273;8724:569;;:::o;1302:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11827:172::-;11918:4;11941:12;:32;11954:18;11941:32;;;;;;;;;;;;;;;:51;;;11934:58;;11827:172;;;:::o;975:24::-;;;;:::o;10752:371::-;10816:6;10875:26;12736:17;:15;:17::i;:::-;12728:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12147:6;;;;;;;;;;;12139:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10825:1;10816:10;;10811:271;10832:15;:22;;;;10828:1;:26;10811:271;;;10904:15;10920:1;10904:18;;;;;;;;;;;;;;;;;;;;;;;;;;;10875:47;;10941:12;:32;10954:18;10941:32;;;;;;;;;;;;;;;:41;;;;;;;;;;;;10940:42;10936:136;;;11002:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10936:136;10856:3;;;;;;;10811:271;;;11104:11;;;;;;;;;;;11091:25;;;11618:203;11725:4;11749:12;:32;11762:18;11749:32;;;;;;;;;;;;;;;:49;;11799:14;11749:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11742:72;;11618:203;;;;:::o;5068:1638::-;5166:25;5226:26;5314;5527:19;5566:6;12736:17;:15;:17::i;:::-;12728:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5194:10;5205:5;5194:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;5166:50;;5301:3;5255:10;5266:5;5255:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;5226:78;;5343:61;5360:10;5371:5;5360:17;;;;;;;;;;;;;;;;;;;;:43;;;5343:16;:61::i;:::-;5314:90;;5469:20;5468:21;5460:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5549:2;5527:24;;5575:1;5566:10;;5561:150;5582:10;:17;;;;5578:1;:21;5561:150;;;5624:10;5635:1;5624:13;;;;;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;5620:81;;;5684:1;5662:24;;5620:81;5601:3;;;;;;;5561:150;;;5761:1;5743:15;:19;5729:5;:34;5721:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5959:1;5912:10;5923:5;5912:17;;;;;;;;;;;;;;;;;;;;:43;;;:48;5908:792;;;5989:1;5980:5;:10;:43;;;;;5994:29;;;;;;;;;;;5980:43;5976:395;;;6240:1;6194:10;6205:5;6194:17;;;;;;;;;;;;;;;;;;;;:43;;:47;;;;5976:395;;;6326:30;6334:21;;6326:3;:7;;:30;;;;:::i;:::-;6280:10;6291:5;6280:17;;;;;;;;;;;;;;;;;;;;:43;;:76;;;;5976:395;5908:792;;;6544:21;:46;;;;;6569:21;6544:46;6540:160;;;6652:37;6660:28;6686:1;6660:21;;:25;;:28;;;;:::i;:::-;6652:3;:7;;:37;;;;:::i;:::-;6606:10;6617:5;6606:17;;;;;;;;;;;;;;;;;;;;:43;;:83;;;;6540:160;5908:792;5068:1638;;;;;;:::o;883:33::-;;;;:::o;7757:961::-;7838:26;7926:20;8020:25;8209:11;12342:18;;;;;;;;;;;12334:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7913:3;7867:10;7878:5;7867:17;;;;;;;;;;;;;;;;;;;;:43;;;:49;7838:78;;7949:61;7966:10;7977:5;7966:17;;;;;;;;;;;;;;;;;;;;:43;;;7949:16;:61::i;:::-;7926:84;;8048:10;8059:5;8048:17;;;;;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;8020:50;;8084:21;:41;;;;;8110:15;8109:16;8084:41;:66;;;;;8130:20;8129:21;8084:66;8080:632;;;8191:4;8166:10;8177:5;8166:17;;;;;;;;;;;;;;;;;;;;:22;;;:29;;;;;;;;;;;;;;;;;;8223:10;8234:5;8223:17;;;;;;;;;;;;;;;;;;;;:24;;;8209:38;;8261:11;;;;;;;;;;;:20;;:28;8282:6;8261:28;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8261:28:0;8318:11;;;;;;;;;;;8308:30;;;8331:6;8308:30;;;;;;;;;;;;;;;;;;8440:1;8408:28;8430:5;8408:10;:17;;;;:21;;:28;;;;:::i;:::-;:33;8404:219;;;8596:11;;;;;;;;;;;8583:25;;;8404:219;8080:632;;;8653:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8080:632;7757:961;;;;;:::o;1207:32::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;948:21::-;;;;:::o;12005:96::-;12053:4;12081:12;;;;;;;;;;;12076:18;;;;;;;;12069:25;;12005:96;:::o;3374:1688::-;3481:20;4050:23;4124:21;12462:8;;12455:3;:15;;:38;;;;;12475:18;;;;;;;;;;;12474:19;12455:38;12447:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12248:6;;;;;;;;;;;12247:7;12239:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3504:27;3521:9;3504:12;;:16;;:27;;;;:::i;:::-;3481:50;;3568:9;;3549:15;:28;;3541:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4089:25;;4076:9;:38;;4050:64;;4167:9;;4148:15;:28;4124:52;;4194:18;:38;;;;4216:16;4194:38;4186:128;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:1;4380:12;:24;4393:10;4380:24;;;;;;;;;;;;;;;:43;;;:48;4376:502;;;4471:207;;;;;;;;;4521:9;4471:207;;;;4577:10;:17;;;;4566:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;4566:29:0;;;;4471:207;;;;4625:5;4471:207;;;;;;4658:5;4471:207;;;;;4444:12;:24;4457:10;4444:24;;;;;;;;;;;;;;;:234;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4692:15;4713:10;4692:32;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;4692:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4376:502;;;4809:58;4857:9;4809:12;:24;4822:10;4809:24;;;;;;;;;;;;;;;:43;;;:47;;:58;;;;:::i;:::-;4763:12;:24;4776:10;4763:24;;;;;;;;;;;;;;;:43;;:104;;;;4376:502;4903:15;4888:12;:30;;;;4948:9;;4932:12;;:25;4928:81;;;4994:4;4973:18;;:25;;;;;;;;;;;;;;;;;;4928:81;5033:10;5023:32;;;5045:9;5023:32;;;;;;;;;;;;;;;;;;3374:1688;;;:::o;800:30::-;;;;;;;;;;;;;:::o;836:41::-;;;;;;;;;;;;;:::o;1401:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11503:109::-;11544:4;11574:8;;11567:3;:15;;:38;;;;;11587:18;;;;;;;;;;;11586:19;11567:38;11560:45;;11503:109;:::o;1060:116:2:-;1120:7;1148:2;1142;:8;;1135:16;;;;;;1169:2;1164;:7;1157:14;;1060:116;;;;:::o;1238:128::-;1298:9;1324:2;1319;:7;1315:11;;1344:2;1339:1;:7;;1332:15;;;;;;1360:1;1353:8;;1238:128;;;;:::o;203:380::-;263:9;495:1;489:2;:7;485:36;;;513:1;506:8;;;;485:36;536:2;531;:7;527:11;;561:2;555;551:1;:6;;;;;;;;:12;544:20;;;;;;577:1;570:8;;203:380;;;;;:::o;665:283::-;725:7;941:2;936;:7;;;;;;;;929:14;;665:283;;;;:::o;87:12715:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o", + "source": "pragma solidity ^0.4.24;\nimport \"openzeppelin-solidity/contracts/math/SafeMath.sol\";\n\n\ncontract CrowdFund {\n using SafeMath for uint256;\n\n enum FreezeReason {\n CALLER_IS_TRUSTEE,\n CROWD_FUND_FAILED,\n MAJORITY_VOTING_TO_REFUND\n }\n\n FreezeReason freezeReason;\n\n struct Milestone {\n uint amount;\n uint amountVotingAgainstPayout;\n uint payoutRequestVoteDeadline;\n bool paid;\n }\n\n struct Contributor {\n uint contributionAmount;\n // array index bool reflect milestone index vote\n bool[] milestoneNoVotes;\n bool refundVote;\n bool refunded;\n }\n\n event Deposited(address indexed payee, uint256 weiAmount);\n event Withdrawn(address indexed payee, uint256 weiAmount);\n\n bool public frozen;\n bool public isRaiseGoalReached;\n bool public immediateFirstMilestonePayout;\n uint public milestoneVotingPeriod;\n uint public deadline;\n uint public raiseGoal;\n uint public amountRaised;\n uint public frozenBalance;\n uint public minimumContributionAmount;\n uint public amountVotingForRefund;\n address public beneficiary;\n mapping(address => Contributor) public contributors;\n address[] public contributorList;\n // authorized addresses to ask for milestone payouts\n address[] public trustees;\n // constructor ensures that all values combined equal raiseGoal\n Milestone[] public milestones;\n\n constructor(\n uint _raiseGoal,\n address _beneficiary,\n address[] _trustees,\n uint[] _milestones,\n uint _deadline,\n uint _milestoneVotingPeriod,\n bool _immediateFirstMilestonePayout)\n public {\n require(_raiseGoal >= 1 ether, \"Raise goal is smaller than 1 ether\");\n require(_trustees.length >= 1 && _trustees.length <= 10, \"Trustee addresses must be at least 1 and not more than 10\");\n require(_milestones.length >= 1 && _milestones.length <= 10, \"Milestones must be at least 1 and not more than 10\");\n // TODO - require minimum duration\n // TODO - require minimum milestone voting period\n\n // ensure that cumalative milestone payouts equal raiseGoalAmount\n uint milestoneTotal = 0;\n for (uint i = 0; i < _milestones.length; i++) {\n uint milestoneAmount = _milestones[i];\n require(milestoneAmount > 0, \"Milestone amount must be greater than 0\");\n milestoneTotal = milestoneTotal.add(milestoneAmount);\n milestones.push(Milestone({\n amount: milestoneAmount,\n payoutRequestVoteDeadline: 0,\n amountVotingAgainstPayout: 0,\n paid: false\n }));\n }\n require(milestoneTotal == _raiseGoal, \"Milestone total must equal raise goal\");\n // TODO - increase minimum contribution amount is 0.1% of raise goal\n minimumContributionAmount = 1;\n raiseGoal = _raiseGoal;\n beneficiary = _beneficiary;\n trustees = _trustees;\n deadline = now + _deadline;\n milestoneVotingPeriod = _milestoneVotingPeriod;\n immediateFirstMilestonePayout = _immediateFirstMilestonePayout;\n isRaiseGoalReached = false;\n amountVotingForRefund = 0;\n frozen = false;\n // assumes no ether contributed as part of contract deployment\n amountRaised = 0;\n }\n\n function contribute() public payable onlyOnGoing onlyUnfrozen {\n // don't allow overfunding\n uint newAmountRaised = amountRaised.add(msg.value);\n require(newAmountRaised <= raiseGoal, \"Contribution exceeds the raise goal.\");\n // require minimumContributionAmount (set during construction)\n // there may be a special case where just enough has been raised so that the remaining raise amount is just smaller than the minimumContributionAmount\n // in this case, allow that the msg.value + amountRaised will equal the raiseGoal.\n // This makes sure that we don't enter a scenario where a proposal can never be fully funded\n bool greaterThanMinimum = msg.value >= minimumContributionAmount;\n bool exactlyRaiseGoal = newAmountRaised == raiseGoal;\n require(greaterThanMinimum || exactlyRaiseGoal, \"msg.value greater than minimum, or msg.value == remaining amount to be raised\");\n // in cases where an address pays > 1 times\n if (contributors[msg.sender].contributionAmount == 0) {\n contributors[msg.sender] = Contributor({\n contributionAmount: msg.value,\n milestoneNoVotes: new bool[](milestones.length),\n refundVote: false,\n refunded: false\n });\n contributorList.push(msg.sender);\n }\n else {\n contributors[msg.sender].contributionAmount = contributors[msg.sender].contributionAmount.add(msg.value);\n }\n\n amountRaised = newAmountRaised;\n if (amountRaised == raiseGoal) {\n isRaiseGoalReached = true;\n }\n emit Deposited(msg.sender, msg.value);\n }\n\n function requestMilestonePayout (uint index) public onlyTrustee onlyRaised onlyUnfrozen {\n bool milestoneAlreadyPaid = milestones[index].paid;\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline > now;\n bool majorityAgainstPayout = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n // prevent requesting paid milestones\n require(!milestoneAlreadyPaid, \"Milestone already paid\");\n\n int lowestIndexPaid = -1;\n for (uint i = 0; i < milestones.length; i++) {\n if (milestones[i].paid) {\n lowestIndexPaid = int(i);\n }\n }\n\n require(index == uint(lowestIndexPaid + 1), \"Milestone request must be for first unpaid milestone\");\n // begin grace period for contributors to vote no on milestone payout\n if (milestones[index].payoutRequestVoteDeadline == 0) {\n if (index == 0 && immediateFirstMilestonePayout) {\n // make milestone payouts immediately avtheailable for the first milestone if immediateFirstMilestonePayout is set during consutrction\n milestones[index].payoutRequestVoteDeadline = 1;\n } else {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod);\n }\n }\n // if the payoutRequestVoteDealine has passed and majority voted against it previously, begin the grace period with 2 times the deadline\n else if (voteDeadlineHasPassed && majorityAgainstPayout) {\n milestones[index].payoutRequestVoteDeadline = now.add(milestoneVotingPeriod.mul(2));\n }\n }\n\n function voteMilestonePayout(uint index, bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool existingMilestoneNoVote = contributors[msg.sender].milestoneNoVotes[index];\n require(existingMilestoneNoVote != vote, \"Vote value must be different than existing vote state\");\n bool milestoneVotingStarted = milestones[index].payoutRequestVoteDeadline > 0;\n bool votePeriodHasEnded = milestones[index].payoutRequestVoteDeadline <= now;\n bool onGoingVote = milestoneVotingStarted && !votePeriodHasEnded;\n require(onGoingVote, \"Milestone voting must be open\");\n contributors[msg.sender].milestoneNoVotes[index] = vote;\n if (!vote) {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.sub(contributors[msg.sender].contributionAmount);\n } else if (vote) {\n milestones[index].amountVotingAgainstPayout = milestones[index].amountVotingAgainstPayout.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function payMilestonePayout(uint index) public onlyRaised onlyUnfrozen {\n bool voteDeadlineHasPassed = milestones[index].payoutRequestVoteDeadline < now;\n bool majorityVotedNo = isMajorityVoting(milestones[index].amountVotingAgainstPayout);\n bool milestoneAlreadyPaid = milestones[index].paid;\n if (voteDeadlineHasPassed && !majorityVotedNo && !milestoneAlreadyPaid) {\n milestones[index].paid = true;\n uint amount = milestones[index].amount;\n beneficiary.transfer(amount);\n emit Withdrawn(beneficiary, amount);\n // if the final milestone just got paid\n if (milestones.length.sub(index) == 1) {\n // useful to selfdestruct in case funds were forcefully deposited into contract. otherwise they are lost.\n selfdestruct(beneficiary);\n }\n } else {\n revert(\"required conditions were not satisfied\");\n }\n }\n\n function voteRefund(bool vote) public onlyContributor onlyRaised onlyUnfrozen {\n bool refundVote = contributors[msg.sender].refundVote;\n require(vote != refundVote, \"Existing vote state is identical to vote value\");\n contributors[msg.sender].refundVote = vote;\n if (!vote) {\n amountVotingForRefund = amountVotingForRefund.sub(contributors[msg.sender].contributionAmount);\n }\n else if (vote) {\n amountVotingForRefund = amountVotingForRefund.add(contributors[msg.sender].contributionAmount);\n }\n }\n\n function refund() public onlyUnfrozen {\n bool callerIsTrustee = isCallerTrustee();\n bool crowdFundFailed = isFailed();\n bool majorityVotingToRefund = isMajorityVoting(amountVotingForRefund);\n require(callerIsTrustee || crowdFundFailed || majorityVotingToRefund, \"Required conditions for refund are not met\");\n if (callerIsTrustee) {\n freezeReason = FreezeReason.CALLER_IS_TRUSTEE;\n } else if (crowdFundFailed) {\n freezeReason = FreezeReason.CROWD_FUND_FAILED;\n } else {\n freezeReason = FreezeReason.MAJORITY_VOTING_TO_REFUND;\n }\n frozen = true;\n frozenBalance = address(this).balance;\n }\n\n // anyone can refund a contributor if a crowdfund has been frozen\n function withdraw(address refundAddress) public onlyFrozen {\n require(frozen, \"CrowdFund is not frozen\");\n bool isRefunded = contributors[refundAddress].refunded;\n require(!isRefunded, \"Specified address is already refunded\");\n contributors[refundAddress].refunded = true;\n uint contributionAmount = contributors[refundAddress].contributionAmount;\n uint amountToRefund = contributionAmount.mul(address(this).balance).div(frozenBalance);\n refundAddress.transfer(amountToRefund);\n emit Withdrawn(refundAddress, amountToRefund);\n }\n\n // it may be useful to selfdestruct in case funds were force deposited to the contract\n function destroy() public onlyTrustee onlyFrozen {\n for (uint i = 0; i < contributorList.length; i++) {\n address contributorAddress = contributorList[i];\n if (!contributors[contributorAddress].refunded) {\n revert(\"At least one contributor has not yet refunded\");\n }\n }\n selfdestruct(beneficiary);\n }\n\n function isMajorityVoting(uint valueVoting) public view returns (bool) {\n return valueVoting.mul(2) > amountRaised;\n }\n\n function isCallerTrustee() public view returns (bool) {\n for (uint i = 0; i < trustees.length; i++) {\n if (msg.sender == trustees[i]) {\n return true;\n }\n }\n return false;\n }\n\n function isFailed() public view returns (bool) {\n return now >= deadline && !isRaiseGoalReached;\n }\n\n function getContributorMilestoneVote(address contributorAddress, uint milestoneIndex) public view returns (bool) { \n return contributors[contributorAddress].milestoneNoVotes[milestoneIndex];\n }\n\n function getContributorContributionAmount(address contributorAddress) public view returns (uint) {\n return contributors[contributorAddress].contributionAmount;\n }\n\n function getFreezeReason() public view returns (uint) {\n return uint(freezeReason);\n }\n\n modifier onlyFrozen() {\n require(frozen, \"CrowdFund is not frozen\");\n _;\n }\n\n modifier onlyUnfrozen() {\n require(!frozen, \"CrowdFund is frozen\");\n _;\n }\n\n modifier onlyRaised() {\n require(isRaiseGoalReached, \"Raise goal is not reached\");\n _;\n }\n\n modifier onlyOnGoing() {\n require(now <= deadline && !isRaiseGoalReached, \"CrowdFund is not ongoing\");\n _;\n }\n\n modifier onlyContributor() {\n require(contributors[msg.sender].contributionAmount != 0, \"Caller is not a contributor\");\n _;\n }\n\n modifier onlyTrustee() {\n require(isCallerTrustee(), \"Caller is not a trustee\");\n _;\n }\n\n}", + "sourcePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", "ast": { - "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", "exportedSymbols": { "CrowdFund": [ - 1076 + 1080 ] }, - "id": 1077, + "id": 1081, "nodeType": "SourceUnit", "nodes": [ { @@ -557,8 +557,8 @@ "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", "id": 2, "nodeType": "ImportDirective", - "scope": 1077, - "sourceUnit": 1229, + "scope": 1081, + "sourceUnit": 1233, "src": "25:59:0", "symbolAliases": [], "unitAlias": "" @@ -569,9 +569,9 @@ "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1076, + "id": 1080, "linearizedBaseContracts": [ - 1076 + 1080 ], "name": "CrowdFund", "nodeType": "ContractDefinition", @@ -583,10 +583,10 @@ "id": 3, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1228, + "referencedDeclaration": 1232, "src": "118:8:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1228", + "typeIdentifier": "t_contract$_SafeMath_$1232", "typeString": "library SafeMath" } }, @@ -635,7 +635,7 @@ "id": 11, "name": "freezeReason", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "264:25:0", "stateVariable": true, "storageLocation": "default", @@ -769,7 +769,7 @@ ], "name": "Milestone", "nodeType": "StructDefinition", - "scope": 1076, + "scope": 1080, "src": "296:144:0", "visibility": "public" }, @@ -894,7 +894,7 @@ ], "name": "Contributor", "nodeType": "StructDefinition", - "scope": 1076, + "scope": 1080, "src": "446:197:0", "visibility": "public" }, @@ -1041,7 +1041,7 @@ "id": 44, "name": "frozen", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "776:18:0", "stateVariable": true, "storageLocation": "default", @@ -1067,7 +1067,7 @@ "id": 46, "name": "isRaiseGoalReached", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "800:30:0", "stateVariable": true, "storageLocation": "default", @@ -1093,7 +1093,7 @@ "id": 48, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "836:41:0", "stateVariable": true, "storageLocation": "default", @@ -1119,7 +1119,7 @@ "id": 50, "name": "milestoneVotingPeriod", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "883:33:0", "stateVariable": true, "storageLocation": "default", @@ -1145,7 +1145,7 @@ "id": 52, "name": "deadline", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "922:20:0", "stateVariable": true, "storageLocation": "default", @@ -1171,7 +1171,7 @@ "id": 54, "name": "raiseGoal", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "948:21:0", "stateVariable": true, "storageLocation": "default", @@ -1197,7 +1197,7 @@ "id": 56, "name": "amountRaised", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "975:24:0", "stateVariable": true, "storageLocation": "default", @@ -1223,7 +1223,7 @@ "id": 58, "name": "frozenBalance", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1005:25:0", "stateVariable": true, "storageLocation": "default", @@ -1249,7 +1249,7 @@ "id": 60, "name": "minimumContributionAmount", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1036:37:0", "stateVariable": true, "storageLocation": "default", @@ -1275,7 +1275,7 @@ "id": 62, "name": "amountVotingForRefund", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1079:33:0", "stateVariable": true, "storageLocation": "default", @@ -1301,7 +1301,7 @@ "id": 64, "name": "beneficiary", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1118:26:0", "stateVariable": true, "storageLocation": "default", @@ -1327,7 +1327,7 @@ "id": 68, "name": "contributors", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1150:51:0", "stateVariable": true, "storageLocation": "default", @@ -1374,7 +1374,7 @@ "id": 71, "name": "contributorList", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1207:32:0", "stateVariable": true, "storageLocation": "default", @@ -1410,7 +1410,7 @@ "id": 74, "name": "trustees", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1302:25:0", "stateVariable": true, "storageLocation": "default", @@ -1446,7 +1446,7 @@ "id": 77, "name": "milestones", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1401:29:0", "stateVariable": true, "storageLocation": "default", @@ -1573,10 +1573,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "1689:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -1790,10 +1790,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "1767:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -2007,10 +2007,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "1894:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -2259,10 +2259,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "2338:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -2354,7 +2354,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "2440:18:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -2783,10 +2783,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "2713:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -3040,7 +3040,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "3026:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -3600,7 +3600,7 @@ "parameters": [], "src": "1679:0:0" }, - "scope": 1076, + "scope": 1080, "src": "1437:1931:0", "stateMutability": "nonpayable", "superFunction": null, @@ -3656,7 +3656,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "3521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -3705,7 +3705,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "3504:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -3812,10 +3812,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "3541:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -3892,7 +3892,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4076:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4101,10 +4101,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "4186:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -4167,7 +4167,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4393:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4278,7 +4278,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4776:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4337,7 +4337,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4857:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4392,7 +4392,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4822:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4445,7 +4445,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "4809:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -4518,7 +4518,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4457:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4563,7 +4563,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -4761,7 +4761,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4713:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -5005,7 +5005,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "5033:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -5034,7 +5034,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "5045:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -5113,7 +5113,7 @@ "name": "onlyOnGoing", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1050, + "referencedDeclaration": 1054, "src": "3411:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -5132,7 +5132,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, + "referencedDeclaration": 1031, "src": "3423:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -5158,7 +5158,7 @@ "parameters": [], "src": "3436:0:0" }, - "scope": 1076, + "scope": 1080, "src": "3374:1688:0", "stateMutability": "payable", "superFunction": null, @@ -5370,7 +5370,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "5301:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -5490,7 +5490,7 @@ "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 924, + "referencedDeclaration": 928, "src": "5343:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", @@ -5581,10 +5581,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "5460:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -6151,10 +6151,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "5721:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -6446,7 +6446,7 @@ "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1169, + "referencedDeclaration": 1173, "src": "6660:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -6481,7 +6481,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "6652:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -6495,7 +6495,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "6652:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -6721,7 +6721,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "6326:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -6735,7 +6735,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "6326:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -6893,7 +6893,7 @@ "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1075, + "referencedDeclaration": 1079, "src": "5120:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -6912,7 +6912,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1036, + "referencedDeclaration": 1040, "src": "5132:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -6931,7 +6931,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, + "referencedDeclaration": 1031, "src": "5143:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -6984,7 +6984,7 @@ "parameters": [], "src": "5156:0:0" }, - "scope": 1076, + "scope": 1080, "src": "5068:1638:0", "stateMutability": "nonpayable", "superFunction": null, @@ -6992,9 +6992,9 @@ }, { "body": { - "id": 589, + "id": 591, "nodeType": "Block", - "src": "6811:930:0", + "src": "6811:940:0", "statements": [ { "assignments": [ @@ -7006,7 +7006,7 @@ "id": 494, "name": "existingMilestoneNoVote", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "6821:28:0", "stateVariable": false, "storageLocation": "default", @@ -7057,7 +7057,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "6865:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -7214,10 +7214,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "6910:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -7252,7 +7252,7 @@ "id": 511, "name": "milestoneVotingStarted", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "7017:27:0", "stateVariable": false, "storageLocation": "default", @@ -7381,7 +7381,7 @@ "id": 520, "name": "votePeriodHasEnded", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "7104:23:0", "stateVariable": false, "storageLocation": "default", @@ -7479,7 +7479,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "7177:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -7505,7 +7505,7 @@ "id": 529, "name": "onGoingVote", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "7190:16:0", "stateVariable": false, "storageLocation": "default", @@ -7643,10 +7643,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "7264:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -7707,7 +7707,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "7340:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -7834,258 +7834,277 @@ } }, "falseBody": { - "id": 587, - "nodeType": "Block", - "src": "7572:163:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { + "condition": { + "argumentTypes": null, + "id": 570, + "name": "vote", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "7576:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 589, + "nodeType": "IfStatement", + "src": "7572:173:0", + "trueBody": { + "id": 588, + "nodeType": "Block", + "src": "7582:163:0", + "statements": [ + { + "expression": { "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 570, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7586:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 572, - "indexExpression": { - "argumentTypes": null, - "id": 571, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7597:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7586:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" - } - }, - "id": 573, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7586:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 579, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "7680:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 582, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 580, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "7693:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7693:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7680:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 583, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "7680:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 574, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7632:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 576, - "indexExpression": { - "argumentTypes": null, - "id": 575, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7643:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7632:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" - } - }, - "id": 577, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7632:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1227, - "src": "7632:47:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 584, + "id": 586, "isConstant": false, "isLValue": false, "isPure": false, - "kind": "functionCall", "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7632:92:0", + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 571, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7596:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 573, + "indexExpression": { + "argumentTypes": null, + "id": 572, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7607:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7596:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" + } + }, + "id": 574, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7596:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 580, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "7690:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 583, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 581, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1247, + "src": "7703:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7703:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7690:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 584, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "7690:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 575, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7642:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 577, + "indexExpression": { + "argumentTypes": null, + "id": 576, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7653:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7642:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" + } + }, + "id": 578, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7642:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 579, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 1231, + "src": "7642:47:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7642:92:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7596:138:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7586:138:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 586, - "nodeType": "ExpressionStatement", - "src": "7586:138:0" - } - ] + "id": 587, + "nodeType": "ExpressionStatement", + "src": "7596:138:0" + } + ] + } }, - "id": 588, + "id": 590, "nodeType": "IfStatement", - "src": "7392:343:0", + "src": "7392:353:0", "trueBody": { "id": 569, "nodeType": "Block", @@ -8186,7 +8205,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "7524:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -8303,7 +8322,7 @@ "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1203, + "referencedDeclaration": 1207, "src": "7463:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -8340,7 +8359,7 @@ ] }, "documentation": null, - "id": 590, + "id": 592, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -8354,7 +8373,7 @@ "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1065, + "referencedDeclaration": 1069, "src": "6771:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -8373,7 +8392,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1036, + "referencedDeclaration": 1040, "src": "6787:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -8392,7 +8411,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, + "referencedDeclaration": 1031, "src": "6798:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -8414,7 +8433,7 @@ "id": 482, "name": "index", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "6741:10:0", "stateVariable": false, "storageLocation": "default", @@ -8440,7 +8459,7 @@ "id": 484, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "6753:9:0", "stateVariable": false, "storageLocation": "default", @@ -8471,30 +8490,30 @@ "parameters": [], "src": "6811:0:0" }, - "scope": 1076, - "src": "6712:1029:0", + "scope": 1080, + "src": "6712:1039:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 676, + "id": 678, "nodeType": "Block", - "src": "7818:890:0", + "src": "7828:890:0", "statements": [ { "assignments": [ - 600 + 602 ], "declarations": [ { "constant": false, - "id": 600, + "id": 602, "name": "voteDeadlineHasPassed", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "7828:26:0", + "scope": 679, + "src": "7838:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8502,10 +8521,10 @@ "typeString": "bool" }, "typeName": { - "id": 599, + "id": 601, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7828:4:0", + "src": "7838:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8515,14 +8534,14 @@ "visibility": "internal" } ], - "id": 607, + "id": 609, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 606, + "id": 608, "isConstant": false, "isLValue": false, "isPure": false, @@ -8533,26 +8552,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 601, + "id": 603, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7857:10:0", + "src": "7867:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 603, + "id": 605, "indexExpression": { "argumentTypes": null, - "id": 602, + "id": 604, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "7868:5:0", + "referencedDeclaration": 594, + "src": "7878:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8563,13 +8582,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7857:17:0", + "src": "7867:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 604, + "id": 606, "isConstant": false, "isLValue": true, "isPure": false, @@ -8577,7 +8596,7 @@ "memberName": "payoutRequestVoteDeadline", "nodeType": "MemberAccess", "referencedDeclaration": 17, - "src": "7857:43:0", + "src": "7867:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8587,38 +8606,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 605, + "id": 607, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, - "src": "7903:3:0", + "referencedDeclaration": 1249, + "src": "7913:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7857:49:0", + "src": "7867:49:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7828:78:0" + "src": "7838:78:0" }, { "assignments": [ - 609 + 611 ], "declarations": [ { "constant": false, - "id": 609, + "id": 611, "name": "majorityVotedNo", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "7916:20:0", + "scope": 679, + "src": "7926:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8626,10 +8645,10 @@ "typeString": "bool" }, "typeName": { - "id": 608, + "id": 610, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7916:4:0", + "src": "7926:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8639,7 +8658,7 @@ "visibility": "internal" } ], - "id": 616, + "id": 618, "initialValue": { "argumentTypes": null, "arguments": [ @@ -8649,26 +8668,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 611, + "id": 613, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7956:10:0", + "src": "7966:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 613, + "id": 615, "indexExpression": { "argumentTypes": null, - "id": 612, + "id": 614, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "7967:5:0", + "referencedDeclaration": 594, + "src": "7977:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8679,13 +8698,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7956:17:0", + "src": "7966:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 614, + "id": 616, "isConstant": false, "isLValue": true, "isPure": false, @@ -8693,7 +8712,7 @@ "memberName": "amountVotingAgainstPayout", "nodeType": "MemberAccess", "referencedDeclaration": 15, - "src": "7956:43:0", + "src": "7966:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8707,18 +8726,18 @@ "typeString": "uint256" } ], - "id": 610, + "id": 612, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 924, - "src": "7939:16:0", + "referencedDeclaration": 928, + "src": "7949:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 615, + "id": 617, "isConstant": false, "isLValue": false, "isPure": false, @@ -8726,27 +8745,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7939:61:0", + "src": "7949:61:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7916:84:0" + "src": "7926:84:0" }, { "assignments": [ - 618 + 620 ], "declarations": [ { "constant": false, - "id": 618, + "id": 620, "name": "milestoneAlreadyPaid", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "8010:25:0", + "scope": 679, + "src": "8020:25:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -8754,10 +8773,10 @@ "typeString": "bool" }, "typeName": { - "id": 617, + "id": 619, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8010:4:0", + "src": "8020:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8767,33 +8786,33 @@ "visibility": "internal" } ], - "id": 623, + "id": 625, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 619, + "id": 621, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8038:10:0", + "src": "8048:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 621, + "id": 623, "indexExpression": { "argumentTypes": null, - "id": 620, + "id": 622, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8049:5:0", + "referencedDeclaration": 594, + "src": "8059:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -8804,13 +8823,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8038:17:0", + "src": "8048:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 622, + "id": 624, "isConstant": false, "isLValue": true, "isPure": false, @@ -8818,14 +8837,14 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8038:22:0", + "src": "8048:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8010:50:0" + "src": "8020:50:0" }, { "condition": { @@ -8834,7 +8853,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 630, + "id": 632, "isConstant": false, "isLValue": false, "isPure": false, @@ -8845,19 +8864,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 627, + "id": 629, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 624, + "id": 626, "name": "voteDeadlineHasPassed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 600, - "src": "8074:21:0", + "referencedDeclaration": 602, + "src": "8084:21:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8867,7 +8886,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 626, + "id": 628, "isConstant": false, "isLValue": false, "isPure": false, @@ -8875,15 +8894,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8099:16:0", + "src": "8109:16:0", "subExpression": { "argumentTypes": null, - "id": 625, + "id": 627, "name": "majorityVotedNo", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "8100:15:0", + "referencedDeclaration": 611, + "src": "8110:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8894,7 +8913,7 @@ "typeString": "bool" } }, - "src": "8074:41:0", + "src": "8084:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8904,7 +8923,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 629, + "id": 631, "isConstant": false, "isLValue": false, "isPure": false, @@ -8912,15 +8931,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8119:21:0", + "src": "8129:21:0", "subExpression": { "argumentTypes": null, - "id": 628, + "id": 630, "name": "milestoneAlreadyPaid", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 618, - "src": "8120:20:0", + "referencedDeclaration": 620, + "src": "8130:20:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -8931,16 +8950,16 @@ "typeString": "bool" } }, - "src": "8074:66:0", + "src": "8084:66:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 674, + "id": 676, "nodeType": "Block", - "src": "8629:73:0", + "src": "8639:73:0", "statements": [ { "expression": { @@ -8949,14 +8968,14 @@ { "argumentTypes": null, "hexValue": "726571756972656420636f6e646974696f6e732077657265206e6f7420736174697366696564", - "id": 671, + "id": 673, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8650:40:0", + "src": "8660:40:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c944a403407a4b450cdf033de02e1e093564ed6120fdd470c5daee653f2d6a87", @@ -8972,21 +8991,21 @@ "typeString": "literal_string \"required conditions were not satisfied\"" } ], - "id": 670, + "id": 672, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1248, - 1249 + 1252, + 1253 ], - "referencedDeclaration": 1249, - "src": "8643:6:0", + "referencedDeclaration": 1253, + "src": "8653:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 672, + "id": 674, "isConstant": false, "isLValue": false, "isPure": false, @@ -8994,30 +9013,30 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8643:48:0", + "src": "8653:48:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 673, + "id": 675, "nodeType": "ExpressionStatement", - "src": "8643:48:0" + "src": "8653:48:0" } ] }, - "id": 675, + "id": 677, "nodeType": "IfStatement", - "src": "8070:632:0", + "src": "8080:632:0", "trueBody": { - "id": 669, + "id": 671, "nodeType": "Block", - "src": "8142:481:0", + "src": "8152:481:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 636, + "id": 638, "isConstant": false, "isLValue": false, "isPure": false, @@ -9028,26 +9047,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 631, + "id": 633, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8156:10:0", + "src": "8166:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 633, + "id": 635, "indexExpression": { "argumentTypes": null, - "id": 632, + "id": 634, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8167:5:0", + "referencedDeclaration": 594, + "src": "8177:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9058,13 +9077,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8156:17:0", + "src": "8166:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 634, + "id": 636, "isConstant": false, "isLValue": true, "isPure": false, @@ -9072,7 +9091,7 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8156:22:0", + "src": "8166:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9083,14 +9102,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 635, + "id": 637, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8181:4:0", + "src": "8191:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -9098,28 +9117,28 @@ }, "value": "true" }, - "src": "8156:29:0", + "src": "8166:29:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 637, + "id": 639, "nodeType": "ExpressionStatement", - "src": "8156:29:0" + "src": "8166:29:0" }, { "assignments": [ - 639 + 641 ], "declarations": [ { "constant": false, - "id": 639, + "id": 641, "name": "amount", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "8199:11:0", + "scope": 679, + "src": "8209:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9127,10 +9146,10 @@ "typeString": "uint256" }, "typeName": { - "id": 638, + "id": 640, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "8199:4:0", + "src": "8209:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9140,33 +9159,33 @@ "visibility": "internal" } ], - "id": 644, + "id": 646, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 640, + "id": 642, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8213:10:0", + "src": "8223:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 642, + "id": 644, "indexExpression": { "argumentTypes": null, - "id": 641, + "id": 643, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8224:5:0", + "referencedDeclaration": 594, + "src": "8234:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9177,13 +9196,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8213:17:0", + "src": "8223:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 643, + "id": 645, "isConstant": false, "isLValue": true, "isPure": false, @@ -9191,14 +9210,14 @@ "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 13, - "src": "8213:24:0", + "src": "8223:24:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "8199:38:0" + "src": "8209:38:0" }, { "expression": { @@ -9206,12 +9225,12 @@ "arguments": [ { "argumentTypes": null, - "id": 648, + "id": 650, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 639, - "src": "8272:6:0", + "referencedDeclaration": 641, + "src": "8282:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9227,18 +9246,18 @@ ], "expression": { "argumentTypes": null, - "id": 645, + "id": 647, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8251:11:0", + "src": "8261:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 647, + "id": 649, "isConstant": false, "isLValue": false, "isPure": false, @@ -9246,13 +9265,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8251:20:0", + "src": "8261:20:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 649, + "id": 651, "isConstant": false, "isLValue": false, "isPure": false, @@ -9260,15 +9279,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8251:28:0", + "src": "8261:28:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 650, + "id": 652, "nodeType": "ExpressionStatement", - "src": "8251:28:0" + "src": "8261:28:0" }, { "eventCall": { @@ -9276,12 +9295,12 @@ "arguments": [ { "argumentTypes": null, - "id": 652, + "id": 654, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8308:11:0", + "src": "8318:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9289,12 +9308,12 @@ }, { "argumentTypes": null, - "id": 653, + "id": 655, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 639, - "src": "8321:6:0", + "referencedDeclaration": 641, + "src": "8331:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9312,18 +9331,18 @@ "typeString": "uint256" } ], - "id": 651, + "id": 653, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "8298:9:0", + "src": "8308:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 654, + "id": 656, "isConstant": false, "isLValue": false, "isPure": false, @@ -9331,15 +9350,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8298:30:0", + "src": "8308:30:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 655, + "id": 657, "nodeType": "EmitStatement", - "src": "8293:35:0" + "src": "8303:35:0" }, { "condition": { @@ -9348,7 +9367,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 662, + "id": 664, "isConstant": false, "isLValue": false, "isPure": false, @@ -9358,12 +9377,12 @@ "arguments": [ { "argumentTypes": null, - "id": 659, + "id": 661, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8420:5:0", + "referencedDeclaration": 594, + "src": "8430:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9381,18 +9400,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 656, + "id": 658, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8398:10:0", + "src": "8408:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 657, + "id": 659, "isConstant": false, "isLValue": true, "isPure": false, @@ -9400,27 +9419,27 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8398:17:0", + "src": "8408:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 658, + "id": 660, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1203, - "src": "8398:21:0", + "referencedDeclaration": 1207, + "src": "8408:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 660, + "id": 662, "isConstant": false, "isLValue": false, "isPure": false, @@ -9428,7 +9447,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8398:28:0", + "src": "8408:28:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9439,14 +9458,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 661, + "id": 663, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8430:1:0", + "src": "8440:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -9454,20 +9473,20 @@ }, "value": "1" }, - "src": "8398:33:0", + "src": "8408:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 668, + "id": 670, "nodeType": "IfStatement", - "src": "8394:219:0", + "src": "8404:219:0", "trueBody": { - "id": 667, + "id": 669, "nodeType": "Block", - "src": "8433:180:0", + "src": "8443:180:0", "statements": [ { "expression": { @@ -9475,12 +9494,12 @@ "arguments": [ { "argumentTypes": null, - "id": 664, + "id": 666, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8586:11:0", + "src": "8596:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9494,18 +9513,18 @@ "typeString": "address" } ], - "id": 663, + "id": 665, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1251, - "src": "8573:12:0", + "referencedDeclaration": 1255, + "src": "8583:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 665, + "id": 667, "isConstant": false, "isLValue": false, "isPure": false, @@ -9513,15 +9532,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8573:25:0", + "src": "8583:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 666, + "id": 668, "nodeType": "ExpressionStatement", - "src": "8573:25:0" + "src": "8583:25:0" } ] } @@ -9532,63 +9551,63 @@ ] }, "documentation": null, - "id": 677, + "id": 679, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ - { - "arguments": null, - "id": 595, - "modifierName": { - "argumentTypes": null, - "id": 594, - "name": "onlyRaised", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1036, - "src": "7794:10:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "7794:10:0" - }, { "arguments": null, "id": 597, "modifierName": { "argumentTypes": null, "id": 596, - "name": "onlyUnfrozen", + "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "7805:12:0", + "referencedDeclaration": 1040, + "src": "7804:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "7805:12:0" + "src": "7804:10:0" + }, + { + "arguments": null, + "id": 599, + "modifierName": { + "argumentTypes": null, + "id": 598, + "name": "onlyUnfrozen", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1031, + "src": "7815:12:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7815:12:0" } ], "name": "payMilestonePayout", "nodeType": "FunctionDefinition", "parameters": { - "id": 593, + "id": 595, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 592, + "id": 594, "name": "index", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "7775:10:0", + "scope": 679, + "src": "7785:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9596,10 +9615,10 @@ "typeString": "uint256" }, "typeName": { - "id": 591, + "id": 593, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "7775:4:0", + "src": "7785:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -9609,39 +9628,39 @@ "visibility": "internal" } ], - "src": "7774:12:0" + "src": "7784:12:0" }, "payable": false, "returnParameters": { - "id": 598, + "id": 600, "nodeType": "ParameterList", "parameters": [], - "src": "7818:0:0" + "src": "7828:0:0" }, - "scope": 1076, - "src": "7747:961:0", + "scope": 1080, + "src": "7757:961:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 738, + "id": 742, "nodeType": "Block", - "src": "8792:473:0", + "src": "8802:491:0", "statements": [ { "assignments": [ - 689 + 691 ], "declarations": [ { "constant": false, - "id": 689, + "id": 691, "name": "refundVote", "nodeType": "VariableDeclaration", - "scope": 739, - "src": "8802:15:0", + "scope": 743, + "src": "8812:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -9649,10 +9668,10 @@ "typeString": "bool" }, "typeName": { - "id": 688, + "id": 690, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8802:4:0", + "src": "8812:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9662,41 +9681,41 @@ "visibility": "internal" } ], - "id": 695, + "id": 697, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 690, + "id": 692, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8820:12:0", + "src": "8830:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 693, + "id": 695, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 691, + "id": 693, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "8833:3:0", + "referencedDeclaration": 1247, + "src": "8843:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 692, + "id": 694, "isConstant": false, "isLValue": false, "isPure": false, @@ -9704,7 +9723,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8833:10:0", + "src": "8843:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9715,13 +9734,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8820:24:0", + "src": "8830:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 694, + "id": 696, "isConstant": false, "isLValue": true, "isPure": false, @@ -9729,14 +9748,14 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8820:35:0", + "src": "8830:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8802:53:0" + "src": "8812:53:0" }, { "expression": { @@ -9748,19 +9767,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 699, + "id": 701, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 697, + "id": 699, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 679, - "src": "8873:4:0", + "referencedDeclaration": 681, + "src": "8883:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9770,18 +9789,18 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 698, + "id": 700, "name": "refundVote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 689, - "src": "8881:10:0", + "referencedDeclaration": 691, + "src": "8891:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8873:18:0", + "src": "8883:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9790,14 +9809,14 @@ { "argumentTypes": null, "hexValue": "4578697374696e6720766f7465207374617465206973206964656e746963616c20746f20766f74652076616c7565", - "id": 700, + "id": 702, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8893:48:0", + "src": "8903:48:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_83d9b841f406ef52e32942228e28c13fcdb47e5fa9512f22f335b7955cb71cb5", @@ -9817,21 +9836,21 @@ "typeString": "literal_string \"Existing vote state is identical to vote value\"" } ], - "id": 696, + "id": 698, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "8865:7:0", + "referencedDeclaration": 1251, + "src": "8875:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 701, + "id": 703, "isConstant": false, "isLValue": false, "isPure": false, @@ -9839,20 +9858,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8865:77:0", + "src": "8875:77:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 702, + "id": 704, "nodeType": "ExpressionStatement", - "src": "8865:77:0" + "src": "8875:77:0" }, { "expression": { "argumentTypes": null, - "id": 709, + "id": 711, "isConstant": false, "isLValue": false, "isPure": false, @@ -9863,34 +9882,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 703, + "id": 705, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8952:12:0", + "src": "8962:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 706, + "id": 708, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 704, + "id": 706, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "8965:3:0", + "referencedDeclaration": 1247, + "src": "8975:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 705, + "id": 707, "isConstant": false, "isLValue": false, "isPure": false, @@ -9898,7 +9917,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8965:10:0", + "src": "8975:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -9909,13 +9928,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8952:24:0", + "src": "8962:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 707, + "id": 709, "isConstant": false, "isLValue": true, "isPure": false, @@ -9923,7 +9942,7 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8952:35:0", + "src": "8962:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9933,31 +9952,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 708, + "id": 710, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 679, - "src": "8990:4:0", + "referencedDeclaration": 681, + "src": "9000:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8952:42:0", + "src": "8962:42:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 710, + "id": 712, "nodeType": "ExpressionStatement", - "src": "8952:42:0" + "src": "8962:42:0" }, { "condition": { "argumentTypes": null, - "id": 712, + "id": 714, "isConstant": false, "isLValue": false, "isPure": false, @@ -9965,15 +9984,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "9008:5:0", + "src": "9018:5:0", "subExpression": { "argumentTypes": null, - "id": 711, + "id": 713, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 679, - "src": "9009:4:0", + "referencedDeclaration": 681, + "src": "9019:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -9985,193 +10004,212 @@ } }, "falseBody": { - "id": 736, - "nodeType": "Block", - "src": "9140:119:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 734, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { + "condition": { + "argumentTypes": null, + "id": 727, + "name": "vote", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 681, + "src": "9162:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 740, + "nodeType": "IfStatement", + "src": "9158:129:0", + "trueBody": { + "id": 739, + "nodeType": "Block", + "src": "9168:119:0", + "statements": [ + { + "expression": { "argumentTypes": null, - "id": 725, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9154:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 728, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "9204:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 731, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 729, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "9217:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9217:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9204:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 732, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "9204:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 726, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9178:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1227, - "src": "9178:25:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 733, + "id": 737, "isConstant": false, "isLValue": false, "isPure": false, - "kind": "functionCall", "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9178:70:0", + "leftHandSide": { + "argumentTypes": null, + "id": 728, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9182:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 731, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "9232:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 734, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 732, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1247, + "src": "9245:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9245:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9232:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 735, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "9232:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 729, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9206:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 1231, + "src": "9206:25:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9206:70:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9182:94:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9154:94:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 735, - "nodeType": "ExpressionStatement", - "src": "9154:94:0" - } - ] + "id": 738, + "nodeType": "ExpressionStatement", + "src": "9182:94:0" + } + ] + } }, - "id": 737, + "id": 741, "nodeType": "IfStatement", - "src": "9004:255:0", + "src": "9014:273:0", "trueBody": { - "id": 724, + "id": 726, "nodeType": "Block", - "src": "9015:119:0", + "src": "9025:119:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 722, + "id": 724, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 713, + "id": 715, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9029:21:0", + "src": "9039:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10188,34 +10226,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 716, + "id": 718, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "9079:12:0", + "src": "9089:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 719, + "id": 721, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 717, + "id": 719, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "9092:3:0", + "referencedDeclaration": 1247, + "src": "9102:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 718, + "id": 720, "isConstant": false, "isLValue": false, "isPure": false, @@ -10223,7 +10261,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9092:10:0", + "src": "9102:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -10234,13 +10272,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "9079:24:0", + "src": "9089:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 720, + "id": 722, "isConstant": false, "isLValue": true, "isPure": false, @@ -10248,7 +10286,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "9079:43:0", + "src": "9089:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10264,32 +10302,32 @@ ], "expression": { "argumentTypes": null, - "id": 714, + "id": 716, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9053:21:0", + "src": "9063:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 715, + "id": 717, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1203, - "src": "9053:25:0", + "referencedDeclaration": 1207, + "src": "9063:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 721, + "id": 723, "isConstant": false, "isLValue": false, "isPure": false, @@ -10297,21 +10335,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9053:70:0", + "src": "9063:70:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9029:94:0", + "src": "9039:94:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 723, + "id": 725, "nodeType": "ExpressionStatement", - "src": "9029:94:0" + "src": "9039:94:0" } ] } @@ -10319,48 +10357,29 @@ ] }, "documentation": null, - "id": 739, + "id": 743, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ - { - "arguments": null, - "id": 682, - "modifierName": { - "argumentTypes": null, - "id": 681, - "name": "onlyContributor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1065, - "src": "8752:15:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "8752:15:0" - }, { "arguments": null, "id": 684, "modifierName": { "argumentTypes": null, "id": 683, - "name": "onlyRaised", + "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1036, - "src": "8768:10:0", + "referencedDeclaration": 1069, + "src": "8762:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8768:10:0" + "src": "8762:15:0" }, { "arguments": null, @@ -10368,33 +10387,52 @@ "modifierName": { "argumentTypes": null, "id": 685, - "name": "onlyUnfrozen", + "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "8779:12:0", + "referencedDeclaration": 1040, + "src": "8778:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8779:12:0" + "src": "8778:10:0" + }, + { + "arguments": null, + "id": 688, + "modifierName": { + "argumentTypes": null, + "id": 687, + "name": "onlyUnfrozen", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1031, + "src": "8789:12:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8789:12:0" } ], "name": "voteRefund", "nodeType": "FunctionDefinition", "parameters": { - "id": 680, + "id": 682, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 679, + "id": 681, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 739, - "src": "8734:9:0", + "scope": 743, + "src": "8744:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10402,10 +10440,10 @@ "typeString": "bool" }, "typeName": { - "id": 678, + "id": 680, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8734:4:0", + "src": "8744:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10415,39 +10453,39 @@ "visibility": "internal" } ], - "src": "8733:11:0" + "src": "8743:11:0" }, "payable": false, "returnParameters": { - "id": 687, + "id": 689, "nodeType": "ParameterList", "parameters": [], - "src": "8792:0:0" + "src": "8802:0:0" }, - "scope": 1076, - "src": "8714:551:0", + "scope": 1080, + "src": "8724:569:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 802, + "id": 806, "nodeType": "Block", - "src": "9309:655:0", + "src": "9337:655:0", "statements": [ { "assignments": [ - 745 + 749 ], "declarations": [ { "constant": false, - "id": 745, + "id": 749, "name": "callerIsTrustee", "nodeType": "VariableDeclaration", - "scope": 803, - "src": "9319:20:0", + "scope": 807, + "src": "9347:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10455,10 +10493,10 @@ "typeString": "bool" }, "typeName": { - "id": 744, + "id": 748, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9319:4:0", + "src": "9347:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10468,24 +10506,24 @@ "visibility": "internal" } ], - "id": 748, + "id": 752, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 746, + "id": 750, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 955, - "src": "9342:15:0", + "referencedDeclaration": 959, + "src": "9370:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 747, + "id": 751, "isConstant": false, "isLValue": false, "isPure": false, @@ -10493,27 +10531,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9342:17:0", + "src": "9370:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9319:40:0" + "src": "9347:40:0" }, { "assignments": [ - 750 + 754 ], "declarations": [ { "constant": false, - "id": 750, + "id": 754, "name": "crowdFundFailed", "nodeType": "VariableDeclaration", - "scope": 803, - "src": "9369:20:0", + "scope": 807, + "src": "9397:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10521,10 +10559,10 @@ "typeString": "bool" }, "typeName": { - "id": 749, + "id": 753, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9369:4:0", + "src": "9397:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10534,24 +10572,24 @@ "visibility": "internal" } ], - "id": 753, + "id": 757, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 751, + "id": 755, "name": "isFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "9392:8:0", + "referencedDeclaration": 972, + "src": "9420:8:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 752, + "id": 756, "isConstant": false, "isLValue": false, "isPure": false, @@ -10559,27 +10597,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9392:10:0", + "src": "9420:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9369:33:0" + "src": "9397:33:0" }, { "assignments": [ - 755 + 759 ], "declarations": [ { "constant": false, - "id": 755, + "id": 759, "name": "majorityVotingToRefund", "nodeType": "VariableDeclaration", - "scope": 803, - "src": "9412:27:0", + "scope": 807, + "src": "9440:27:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -10587,10 +10625,10 @@ "typeString": "bool" }, "typeName": { - "id": 754, + "id": 758, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9412:4:0", + "src": "9440:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10600,18 +10638,18 @@ "visibility": "internal" } ], - "id": 759, + "id": 763, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 757, + "id": 761, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9459:21:0", + "src": "9487:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -10625,18 +10663,18 @@ "typeString": "uint256" } ], - "id": 756, + "id": 760, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 924, - "src": "9442:16:0", + "referencedDeclaration": 928, + "src": "9470:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 758, + "id": 762, "isConstant": false, "isLValue": false, "isPure": false, @@ -10644,14 +10682,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9442:39:0", + "src": "9470:39:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9412:69:0" + "src": "9440:69:0" }, { "expression": { @@ -10663,7 +10701,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 765, + "id": 769, "isConstant": false, "isLValue": false, "isPure": false, @@ -10674,19 +10712,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 763, + "id": 767, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 761, + "id": 765, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 745, - "src": "9499:15:0", + "referencedDeclaration": 749, + "src": "9527:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10696,18 +10734,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 762, + "id": 766, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 750, - "src": "9518:15:0", + "referencedDeclaration": 754, + "src": "9546:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9499:34:0", + "src": "9527:34:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10717,18 +10755,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 764, + "id": 768, "name": "majorityVotingToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 755, - "src": "9537:22:0", + "referencedDeclaration": 759, + "src": "9565:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9499:60:0", + "src": "9527:60:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10737,14 +10775,14 @@ { "argumentTypes": null, "hexValue": "526571756972656420636f6e646974696f6e7320666f7220726566756e6420617265206e6f74206d6574", - "id": 766, + "id": 770, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9561:44:0", + "src": "9589:44:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_1086fb0a245a80bddbec2bbf87c88d8fc142025bee989551e1ac5ccca15d31ff", @@ -10764,21 +10802,21 @@ "typeString": "literal_string \"Required conditions for refund are not met\"" } ], - "id": 760, + "id": 764, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "9491:7:0", + "referencedDeclaration": 1251, + "src": "9519:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 767, + "id": 771, "isConstant": false, "isLValue": false, "isPure": false, @@ -10786,25 +10824,25 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9491:115:0", + "src": "9519:115:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 768, + "id": 772, "nodeType": "ExpressionStatement", - "src": "9491:115:0" + "src": "9519:115:0" }, { "condition": { "argumentTypes": null, - "id": 769, + "id": 773, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 745, - "src": "9620:15:0", + "referencedDeclaration": 749, + "src": "9648:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -10813,38 +10851,38 @@ "falseBody": { "condition": { "argumentTypes": null, - "id": 776, + "id": 780, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 750, - "src": "9717:15:0", + "referencedDeclaration": 754, + "src": "9745:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 788, + "id": 792, "nodeType": "Block", - "src": "9810:78:0", + "src": "9838:78:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 786, + "id": 790, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 783, + "id": 787, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9824:12:0", + "src": "9852:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -10856,18 +10894,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 784, + "id": 788, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9839:12:0", + "src": "9867:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 785, + "id": 789, "isConstant": false, "isLValue": false, "isPure": true, @@ -10875,48 +10913,48 @@ "memberName": "MAJORITY_VOTING_TO_REFUND", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9839:38:0", + "src": "9867:38:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9824:53:0", + "src": "9852:53:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 787, + "id": 791, "nodeType": "ExpressionStatement", - "src": "9824:53:0" + "src": "9852:53:0" } ] }, - "id": 789, + "id": 793, "nodeType": "IfStatement", - "src": "9713:175:0", + "src": "9741:175:0", "trueBody": { - "id": 782, + "id": 786, "nodeType": "Block", - "src": "9734:70:0", + "src": "9762:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 780, + "id": 784, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 777, + "id": 781, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9748:12:0", + "src": "9776:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -10928,18 +10966,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 778, + "id": 782, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9763:12:0", + "src": "9791:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 779, + "id": 783, "isConstant": false, "isLValue": false, "isPure": true, @@ -10947,49 +10985,49 @@ "memberName": "CROWD_FUND_FAILED", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9763:30:0", + "src": "9791:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9748:45:0", + "src": "9776:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 781, + "id": 785, "nodeType": "ExpressionStatement", - "src": "9748:45:0" + "src": "9776:45:0" } ] } }, - "id": 790, + "id": 794, "nodeType": "IfStatement", - "src": "9616:272:0", + "src": "9644:272:0", "trueBody": { - "id": 775, + "id": 779, "nodeType": "Block", - "src": "9637:70:0", + "src": "9665:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 773, + "id": 777, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 770, + "id": 774, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9651:12:0", + "src": "9679:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -11001,18 +11039,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 771, + "id": 775, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9666:12:0", + "src": "9694:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 772, + "id": 776, "isConstant": false, "isLValue": false, "isPure": true, @@ -11020,21 +11058,21 @@ "memberName": "CALLER_IS_TRUSTEE", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9666:30:0", + "src": "9694:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9651:45:0", + "src": "9679:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 774, + "id": 778, "nodeType": "ExpressionStatement", - "src": "9651:45:0" + "src": "9679:45:0" } ] } @@ -11042,19 +11080,19 @@ { "expression": { "argumentTypes": null, - "id": 793, + "id": 797, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 791, + "id": 795, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "9897:6:0", + "src": "9925:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11065,14 +11103,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 792, + "id": 796, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "9906:4:0", + "src": "9934:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -11080,32 +11118,32 @@ }, "value": "true" }, - "src": "9897:13:0", + "src": "9925:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 794, + "id": 798, "nodeType": "ExpressionStatement", - "src": "9897:13:0" + "src": "9925:13:0" }, { "expression": { "argumentTypes": null, - "id": 800, + "id": 804, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 795, + "id": 799, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "9920:13:0", + "src": "9948:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11120,14 +11158,14 @@ "arguments": [ { "argumentTypes": null, - "id": 797, + "id": 801, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1258, - "src": "9944:4:0", + "referencedDeclaration": 1262, + "src": "9972:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } } @@ -11135,24 +11173,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } ], - "id": 796, + "id": 800, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9936:7:0", + "src": "9964:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 798, + "id": 802, "isConstant": false, "isLValue": false, "isPure": false, @@ -11160,13 +11198,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9936:13:0", + "src": "9964:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 799, + "id": 803, "isConstant": false, "isLValue": false, "isPure": false, @@ -11174,76 +11212,76 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9936:21:0", + "src": "9964:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9920:37:0", + "src": "9948:37:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 801, + "id": 805, "nodeType": "ExpressionStatement", - "src": "9920:37:0" + "src": "9948:37:0" } ] }, "documentation": null, - "id": 803, + "id": 807, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 742, + "id": 746, "modifierName": { "argumentTypes": null, - "id": 741, + "id": 745, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "9296:12:0", + "referencedDeclaration": 1031, + "src": "9324:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "9296:12:0" + "src": "9324:12:0" } ], "name": "refund", "nodeType": "FunctionDefinition", "parameters": { - "id": 740, + "id": 744, "nodeType": "ParameterList", "parameters": [], - "src": "9286:2:0" + "src": "9314:2:0" }, "payable": false, "returnParameters": { - "id": 743, + "id": 747, "nodeType": "ParameterList", "parameters": [], - "src": "9309:0:0" + "src": "9337:0:0" }, - "scope": 1076, - "src": "9271:693:0", + "scope": 1080, + "src": "9299:693:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 866, + "id": 870, "nodeType": "Block", - "src": "10099:528:0", + "src": "10127:528:0", "statements": [ { "expression": { @@ -11251,12 +11289,12 @@ "arguments": [ { "argumentTypes": null, - "id": 811, + "id": 815, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "10117:6:0", + "src": "10145:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11265,14 +11303,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 812, + "id": 816, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10125:25:0", + "src": "10153:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -11292,21 +11330,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 810, + "id": 814, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "10109:7:0", + "referencedDeclaration": 1251, + "src": "10137:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 813, + "id": 817, "isConstant": false, "isLValue": false, "isPure": false, @@ -11314,28 +11352,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10109:42:0", + "src": "10137:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 814, + "id": 818, "nodeType": "ExpressionStatement", - "src": "10109:42:0" + "src": "10137:42:0" }, { "assignments": [ - 816 + 820 ], "declarations": [ { "constant": false, - "id": 816, + "id": 820, "name": "isRefunded", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10161:15:0", + "scope": 871, + "src": "10189:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11343,10 +11381,10 @@ "typeString": "bool" }, "typeName": { - "id": 815, + "id": 819, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "10161:4:0", + "src": "10189:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11356,33 +11394,33 @@ "visibility": "internal" } ], - "id": 821, + "id": 825, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 817, + "id": 821, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10179:12:0", + "src": "10207:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 819, + "id": 823, "indexExpression": { "argumentTypes": null, - "id": 818, + "id": 822, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10192:13:0", + "referencedDeclaration": 809, + "src": "10220:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11393,13 +11431,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10179:27:0", + "src": "10207:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 820, + "id": 824, "isConstant": false, "isLValue": true, "isPure": false, @@ -11407,14 +11445,14 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10179:36:0", + "src": "10207:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "10161:54:0" + "src": "10189:54:0" }, { "expression": { @@ -11422,7 +11460,7 @@ "arguments": [ { "argumentTypes": null, - "id": 824, + "id": 828, "isConstant": false, "isLValue": false, "isPure": false, @@ -11430,15 +11468,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10233:11:0", + "src": "10261:11:0", "subExpression": { "argumentTypes": null, - "id": 823, + "id": 827, "name": "isRefunded", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 816, - "src": "10234:10:0", + "referencedDeclaration": 820, + "src": "10262:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11452,14 +11490,14 @@ { "argumentTypes": null, "hexValue": "537065636966696564206164647265737320697320616c726561647920726566756e646564", - "id": 825, + "id": 829, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10246:39:0", + "src": "10274:39:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ad918abf6ea38b3d8dd6fccfc0198c349db0339300085e3846f4b85c44350efa", @@ -11479,21 +11517,21 @@ "typeString": "literal_string \"Specified address is already refunded\"" } ], - "id": 822, + "id": 826, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "10225:7:0", + "referencedDeclaration": 1251, + "src": "10253:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 826, + "id": 830, "isConstant": false, "isLValue": false, "isPure": false, @@ -11501,20 +11539,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10225:61:0", + "src": "10253:61:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 827, + "id": 831, "nodeType": "ExpressionStatement", - "src": "10225:61:0" + "src": "10253:61:0" }, { "expression": { "argumentTypes": null, - "id": 833, + "id": 837, "isConstant": false, "isLValue": false, "isPure": false, @@ -11525,26 +11563,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 828, + "id": 832, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10296:12:0", + "src": "10324:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 830, + "id": 834, "indexExpression": { "argumentTypes": null, - "id": 829, + "id": 833, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10309:13:0", + "referencedDeclaration": 809, + "src": "10337:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11555,13 +11593,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10296:27:0", + "src": "10324:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 831, + "id": 835, "isConstant": false, "isLValue": true, "isPure": false, @@ -11569,7 +11607,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10296:36:0", + "src": "10324:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -11580,14 +11618,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 832, + "id": 836, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "10335:4:0", + "src": "10363:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -11595,28 +11633,28 @@ }, "value": "true" }, - "src": "10296:43:0", + "src": "10324:43:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 834, + "id": 838, "nodeType": "ExpressionStatement", - "src": "10296:43:0" + "src": "10324:43:0" }, { "assignments": [ - 836 + 840 ], "declarations": [ { "constant": false, - "id": 836, + "id": 840, "name": "contributionAmount", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10349:23:0", + "scope": 871, + "src": "10377:23:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11624,10 +11662,10 @@ "typeString": "uint256" }, "typeName": { - "id": 835, + "id": 839, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10349:4:0", + "src": "10377:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11637,33 +11675,33 @@ "visibility": "internal" } ], - "id": 841, + "id": 845, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 837, + "id": 841, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10375:12:0", + "src": "10403:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 839, + "id": 843, "indexExpression": { "argumentTypes": null, - "id": 838, + "id": 842, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10388:13:0", + "referencedDeclaration": 809, + "src": "10416:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11674,13 +11712,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10375:27:0", + "src": "10403:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 840, + "id": 844, "isConstant": false, "isLValue": true, "isPure": false, @@ -11688,27 +11726,27 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "10375:46:0", + "src": "10403:46:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10349:72:0" + "src": "10377:72:0" }, { "assignments": [ - 843 + 847 ], "declarations": [ { "constant": false, - "id": 843, + "id": 847, "name": "amountToRefund", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10431:19:0", + "scope": 871, + "src": "10459:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -11716,10 +11754,10 @@ "typeString": "uint256" }, "typeName": { - "id": 842, + "id": 846, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10431:4:0", + "src": "10459:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11729,18 +11767,18 @@ "visibility": "internal" } ], - "id": 854, + "id": 858, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 852, + "id": 856, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "10503:13:0", + "src": "10531:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11764,14 +11802,14 @@ "arguments": [ { "argumentTypes": null, - "id": 847, + "id": 851, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1258, - "src": "10484:4:0", + "referencedDeclaration": 1262, + "src": "10512:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } } @@ -11779,24 +11817,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } ], - "id": 846, + "id": 850, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "10476:7:0", + "src": "10504:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 848, + "id": 852, "isConstant": false, "isLValue": false, "isPure": false, @@ -11804,13 +11842,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10476:13:0", + "src": "10504:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 849, + "id": 853, "isConstant": false, "isLValue": false, "isPure": false, @@ -11818,7 +11856,7 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10476:21:0", + "src": "10504:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11834,32 +11872,32 @@ ], "expression": { "argumentTypes": null, - "id": 844, + "id": 848, "name": "contributionAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "10453:18:0", + "referencedDeclaration": 840, + "src": "10481:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 845, + "id": 849, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1169, - "src": "10453:22:0", + "referencedDeclaration": 1173, + "src": "10481:22:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 850, + "id": 854, "isConstant": false, "isLValue": false, "isPure": false, @@ -11867,27 +11905,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:45:0", + "src": "10481:45:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 851, + "id": 855, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "div", "nodeType": "MemberAccess", - "referencedDeclaration": 1183, - "src": "10453:49:0", + "referencedDeclaration": 1187, + "src": "10481:49:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 853, + "id": 857, "isConstant": false, "isLValue": false, "isPure": false, @@ -11895,14 +11933,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:64:0", + "src": "10481:64:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10431:86:0" + "src": "10459:86:0" }, { "expression": { @@ -11910,12 +11948,12 @@ "arguments": [ { "argumentTypes": null, - "id": 858, + "id": 862, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 843, - "src": "10550:14:0", + "referencedDeclaration": 847, + "src": "10578:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -11931,18 +11969,18 @@ ], "expression": { "argumentTypes": null, - "id": 855, + "id": 859, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10527:13:0", + "referencedDeclaration": 809, + "src": "10555:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 857, + "id": 861, "isConstant": false, "isLValue": false, "isPure": false, @@ -11950,13 +11988,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10527:22:0", + "src": "10555:22:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 859, + "id": 863, "isConstant": false, "isLValue": false, "isPure": false, @@ -11964,15 +12002,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10527:38:0", + "src": "10555:38:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 860, + "id": 864, "nodeType": "ExpressionStatement", - "src": "10527:38:0" + "src": "10555:38:0" }, { "eventCall": { @@ -11980,12 +12018,12 @@ "arguments": [ { "argumentTypes": null, - "id": 862, + "id": 866, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10590:13:0", + "referencedDeclaration": 809, + "src": "10618:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -11993,12 +12031,12 @@ }, { "argumentTypes": null, - "id": 863, + "id": 867, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 843, - "src": "10605:14:0", + "referencedDeclaration": 847, + "src": "10633:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12016,18 +12054,18 @@ "typeString": "uint256" } ], - "id": 861, + "id": 865, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "10580:9:0", + "src": "10608:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 864, + "id": 868, "isConstant": false, "isLValue": false, "isPure": false, @@ -12035,57 +12073,57 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10580:40:0", + "src": "10608:40:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 865, + "id": 869, "nodeType": "EmitStatement", - "src": "10575:45:0" + "src": "10603:45:0" } ] }, "documentation": null, - "id": 867, + "id": 871, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 808, + "id": 812, "modifierName": { "argumentTypes": null, - "id": 807, + "id": 811, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1017, - "src": "10088:10:0", + "referencedDeclaration": 1021, + "src": "10116:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10088:10:0" + "src": "10116:10:0" } ], "name": "withdraw", "nodeType": "FunctionDefinition", "parameters": { - "id": 806, + "id": 810, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 805, + "id": 809, "name": "refundAddress", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10058:21:0", + "scope": 871, + "src": "10086:21:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12093,10 +12131,10 @@ "typeString": "address" }, "typeName": { - "id": 804, + "id": 808, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10058:7:0", + "src": "10086:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12106,45 +12144,45 @@ "visibility": "internal" } ], - "src": "10057:23:0" + "src": "10085:23:0" }, "payable": false, "returnParameters": { - "id": 809, + "id": 813, "nodeType": "ParameterList", "parameters": [], - "src": "10099:0:0" + "src": "10127:0:0" }, - "scope": 1076, - "src": "10040:587:0", + "scope": 1080, + "src": "10068:587:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 908, + "id": 912, "nodeType": "Block", - "src": "10773:322:0", + "src": "10801:322:0", "statements": [ { "body": { - "id": 902, + "id": 906, "nodeType": "Block", - "src": "10833:221:0", + "src": "10861:221:0", "statements": [ { "assignments": [ - 886 + 890 ], "declarations": [ { "constant": false, - "id": 886, + "id": 890, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 909, - "src": "10847:26:0", + "scope": 913, + "src": "10875:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12152,10 +12190,10 @@ "typeString": "address" }, "typeName": { - "id": 885, + "id": 889, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10847:7:0", + "src": "10875:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12165,31 +12203,31 @@ "visibility": "internal" } ], - "id": 890, + "id": 894, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 887, + "id": 891, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10876:15:0", + "src": "10904:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 889, + "id": 893, "indexExpression": { "argumentTypes": null, - "id": 888, + "id": 892, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 875, - "src": "10892:1:0", + "referencedDeclaration": 879, + "src": "10920:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12200,19 +12238,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10876:18:0", + "src": "10904:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "10847:47:0" + "src": "10875:47:0" }, { "condition": { "argumentTypes": null, - "id": 895, + "id": 899, "isConstant": false, "isLValue": false, "isPure": false, @@ -12220,33 +12258,33 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10912:42:0", + "src": "10940:42:0", "subExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 891, + "id": 895, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10913:12:0", + "src": "10941:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 893, + "id": 897, "indexExpression": { "argumentTypes": null, - "id": 892, + "id": 896, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 886, - "src": "10926:18:0", + "referencedDeclaration": 890, + "src": "10954:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12257,13 +12295,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10913:32:0", + "src": "10941:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 894, + "id": 898, "isConstant": false, "isLValue": true, "isPure": false, @@ -12271,7 +12309,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10913:41:0", + "src": "10941:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12283,13 +12321,13 @@ } }, "falseBody": null, - "id": 901, + "id": 905, "nodeType": "IfStatement", - "src": "10908:136:0", + "src": "10936:136:0", "trueBody": { - "id": 900, + "id": 904, "nodeType": "Block", - "src": "10956:88:0", + "src": "10984:88:0", "statements": [ { "expression": { @@ -12298,14 +12336,14 @@ { "argumentTypes": null, "hexValue": "4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f742079657420726566756e646564", - "id": 897, + "id": 901, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10981:47:0", + "src": "11009:47:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_85d231c62370fa6b43ee7ffe2e2243eb8d4631e742e97de3a2558a277a825be1", @@ -12321,21 +12359,21 @@ "typeString": "literal_string \"At least one contributor has not yet refunded\"" } ], - "id": 896, + "id": 900, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1248, - 1249 + 1252, + 1253 ], - "referencedDeclaration": 1249, - "src": "10974:6:0", + "referencedDeclaration": 1253, + "src": "11002:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 898, + "id": 902, "isConstant": false, "isLValue": false, "isPure": false, @@ -12343,15 +12381,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10974:55:0", + "src": "11002:55:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 899, + "id": 903, "nodeType": "ExpressionStatement", - "src": "10974:55:0" + "src": "11002:55:0" } ] } @@ -12364,19 +12402,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 881, + "id": 885, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 878, + "id": 882, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 875, - "src": "10800:1:0", + "referencedDeclaration": 879, + "src": "10828:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12388,18 +12426,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 879, + "id": 883, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10804:15:0", + "src": "10832:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 880, + "id": 884, "isConstant": false, "isLValue": true, "isPure": false, @@ -12407,31 +12445,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10804:22:0", + "src": "10832:22:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10800:26:0", + "src": "10828:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 903, + "id": 907, "initializationExpression": { "assignments": [ - 875 + 879 ], "declarations": [ { "constant": false, - "id": 875, + "id": 879, "name": "i", "nodeType": "VariableDeclaration", - "scope": 909, - "src": "10788:6:0", + "scope": 913, + "src": "10816:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12439,10 +12477,10 @@ "typeString": "uint256" }, "typeName": { - "id": 874, + "id": 878, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10788:4:0", + "src": "10816:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12452,18 +12490,18 @@ "visibility": "internal" } ], - "id": 877, + "id": 881, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 876, + "id": 880, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "10797:1:0", + "src": "10825:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -12472,12 +12510,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "10788:10:0" + "src": "10816:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 883, + "id": 887, "isConstant": false, "isLValue": false, "isPure": false, @@ -12485,15 +12523,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "10828:3:0", + "src": "10856:3:0", "subExpression": { "argumentTypes": null, - "id": 882, + "id": 886, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 875, - "src": "10828:1:0", + "referencedDeclaration": 879, + "src": "10856:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12504,12 +12542,12 @@ "typeString": "uint256" } }, - "id": 884, + "id": 888, "nodeType": "ExpressionStatement", - "src": "10828:3:0" + "src": "10856:3:0" }, "nodeType": "ForStatement", - "src": "10783:271:0" + "src": "10811:271:0" }, { "expression": { @@ -12517,12 +12555,12 @@ "arguments": [ { "argumentTypes": null, - "id": 905, + "id": 909, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "11076:11:0", + "src": "11104:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12536,18 +12574,18 @@ "typeString": "address" } ], - "id": 904, + "id": 908, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1251, - "src": "11063:12:0", + "referencedDeclaration": 1255, + "src": "11091:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 906, + "id": 910, "isConstant": false, "isLValue": false, "isPure": false, @@ -12555,89 +12593,89 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11063:25:0", + "src": "11091:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 907, + "id": 911, "nodeType": "ExpressionStatement", - "src": "11063:25:0" + "src": "11091:25:0" } ] }, "documentation": null, - "id": 909, + "id": 913, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 870, + "id": 874, "modifierName": { "argumentTypes": null, - "id": 869, + "id": 873, "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "10750:11:0", + "referencedDeclaration": 1079, + "src": "10778:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10750:11:0" + "src": "10778:11:0" }, { "arguments": null, - "id": 872, + "id": 876, "modifierName": { "argumentTypes": null, - "id": 871, + "id": 875, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1017, - "src": "10762:10:0", + "referencedDeclaration": 1021, + "src": "10790:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10762:10:0" + "src": "10790:10:0" } ], "name": "destroy", "nodeType": "FunctionDefinition", "parameters": { - "id": 868, + "id": 872, "nodeType": "ParameterList", "parameters": [], - "src": "10740:2:0" + "src": "10768:2:0" }, "payable": false, "returnParameters": { - "id": 873, + "id": 877, "nodeType": "ParameterList", "parameters": [], - "src": "10773:0:0" + "src": "10801:0:0" }, - "scope": 1076, - "src": "10724:371:0", + "scope": 1080, + "src": "10752:371:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 923, + "id": 927, "nodeType": "Block", - "src": "11172:57:0", + "src": "11200:57:0", "statements": [ { "expression": { @@ -12646,7 +12684,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 921, + "id": 925, "isConstant": false, "isLValue": false, "isPure": false, @@ -12657,14 +12695,14 @@ { "argumentTypes": null, "hexValue": "32", - "id": 918, + "id": 922, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11205:1:0", + "src": "11233:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_2_by_1", @@ -12682,32 +12720,32 @@ ], "expression": { "argumentTypes": null, - "id": 916, + "id": 920, "name": "valueVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 911, - "src": "11189:11:0", + "referencedDeclaration": 915, + "src": "11217:11:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 917, + "id": 921, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1169, - "src": "11189:15:0", + "referencedDeclaration": 1173, + "src": "11217:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 919, + "id": 923, "isConstant": false, "isLValue": false, "isPure": false, @@ -12715,7 +12753,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11189:18:0", + "src": "11217:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12725,32 +12763,32 @@ "operator": ">", "rightExpression": { "argumentTypes": null, - "id": 920, + "id": 924, "name": "amountRaised", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 56, - "src": "11210:12:0", + "src": "11238:12:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11189:33:0", + "src": "11217:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 915, - "id": 922, + "functionReturnParameters": 919, + "id": 926, "nodeType": "Return", - "src": "11182:40:0" + "src": "11210:40:0" } ] }, "documentation": null, - "id": 924, + "id": 928, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -12758,16 +12796,16 @@ "name": "isMajorityVoting", "nodeType": "FunctionDefinition", "parameters": { - "id": 912, + "id": 916, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 911, + "id": 915, "name": "valueVoting", "nodeType": "VariableDeclaration", - "scope": 924, - "src": "11127:16:0", + "scope": 928, + "src": "11155:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12775,10 +12813,10 @@ "typeString": "uint256" }, "typeName": { - "id": 910, + "id": 914, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11127:4:0", + "src": "11155:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12788,20 +12826,20 @@ "visibility": "internal" } ], - "src": "11126:18:0" + "src": "11154:18:0" }, "payable": false, "returnParameters": { - "id": 915, + "id": 919, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 914, + "id": 918, "name": "", "nodeType": "VariableDeclaration", - "scope": 924, - "src": "11166:4:0", + "scope": 928, + "src": "11194:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -12809,10 +12847,10 @@ "typeString": "bool" }, "typeName": { - "id": 913, + "id": 917, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11166:4:0", + "src": "11194:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -12822,25 +12860,25 @@ "visibility": "internal" } ], - "src": "11165:6:0" + "src": "11193:6:0" }, - "scope": 1076, - "src": "11101:128:0", + "scope": 1080, + "src": "11129:128:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 954, + "id": 958, "nodeType": "Block", - "src": "11289:180:0", + "src": "11317:180:0", "statements": [ { "body": { - "id": 950, + "id": 954, "nodeType": "Block", - "src": "11342:99:0", + "src": "11370:99:0", "statements": [ { "condition": { @@ -12849,7 +12887,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 945, + "id": 949, "isConstant": false, "isLValue": false, "isPure": false, @@ -12858,18 +12896,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 940, + "id": 944, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "11360:3:0", + "referencedDeclaration": 1247, + "src": "11388:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 941, + "id": 945, "isConstant": false, "isLValue": false, "isPure": false, @@ -12877,7 +12915,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11360:10:0", + "src": "11388:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -12889,26 +12927,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 942, + "id": 946, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11374:8:0", + "src": "11402:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 944, + "id": 948, "indexExpression": { "argumentTypes": null, - "id": 943, + "id": 947, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "11383:1:0", + "referencedDeclaration": 934, + "src": "11411:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12919,39 +12957,39 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11374:11:0", + "src": "11402:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "11360:25:0", + "src": "11388:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 949, + "id": 953, "nodeType": "IfStatement", - "src": "11356:75:0", + "src": "11384:75:0", "trueBody": { - "id": 948, + "id": 952, "nodeType": "Block", - "src": "11387:44:0", + "src": "11415:44:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 946, + "id": 950, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11412:4:0", + "src": "11440:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -12959,10 +12997,10 @@ }, "value": "true" }, - "functionReturnParameters": 928, - "id": 947, + "functionReturnParameters": 932, + "id": 951, "nodeType": "Return", - "src": "11405:11:0" + "src": "11433:11:0" } ] } @@ -12975,19 +13013,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 936, + "id": 940, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 933, + "id": 937, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "11316:1:0", + "referencedDeclaration": 934, + "src": "11344:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -12999,18 +13037,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 934, + "id": 938, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11320:8:0", + "src": "11348:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 935, + "id": 939, "isConstant": false, "isLValue": true, "isPure": false, @@ -13018,31 +13056,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11320:15:0", + "src": "11348:15:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11316:19:0", + "src": "11344:19:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 951, + "id": 955, "initializationExpression": { "assignments": [ - 930 + 934 ], "declarations": [ { "constant": false, - "id": 930, + "id": 934, "name": "i", "nodeType": "VariableDeclaration", - "scope": 955, - "src": "11304:6:0", + "scope": 959, + "src": "11332:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13050,10 +13088,10 @@ "typeString": "uint256" }, "typeName": { - "id": 929, + "id": 933, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11304:4:0", + "src": "11332:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13063,18 +13101,18 @@ "visibility": "internal" } ], - "id": 932, + "id": 936, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 931, + "id": 935, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11313:1:0", + "src": "11341:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -13083,12 +13121,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "11304:10:0" + "src": "11332:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 938, + "id": 942, "isConstant": false, "isLValue": false, "isPure": false, @@ -13096,15 +13134,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "11337:3:0", + "src": "11365:3:0", "subExpression": { "argumentTypes": null, - "id": 937, + "id": 941, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "11337:1:0", + "referencedDeclaration": 934, + "src": "11365:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13115,25 +13153,25 @@ "typeString": "uint256" } }, - "id": 939, + "id": 943, "nodeType": "ExpressionStatement", - "src": "11337:3:0" + "src": "11365:3:0" }, "nodeType": "ForStatement", - "src": "11299:142:0" + "src": "11327:142:0" }, { "expression": { "argumentTypes": null, "hexValue": "66616c7365", - "id": 952, + "id": 956, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11457:5:0", + "src": "11485:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -13141,15 +13179,15 @@ }, "value": "false" }, - "functionReturnParameters": 928, - "id": 953, + "functionReturnParameters": 932, + "id": 957, "nodeType": "Return", - "src": "11450:12:0" + "src": "11478:12:0" } ] }, "documentation": null, - "id": 955, + "id": 959, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13157,23 +13195,23 @@ "name": "isCallerTrustee", "nodeType": "FunctionDefinition", "parameters": { - "id": 925, + "id": 929, "nodeType": "ParameterList", "parameters": [], - "src": "11259:2:0" + "src": "11287:2:0" }, "payable": false, "returnParameters": { - "id": 928, + "id": 932, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 927, + "id": 931, "name": "", "nodeType": "VariableDeclaration", - "scope": 955, - "src": "11283:4:0", + "scope": 959, + "src": "11311:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13181,10 +13219,10 @@ "typeString": "bool" }, "typeName": { - "id": 926, + "id": 930, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11283:4:0", + "src": "11311:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13194,19 +13232,19 @@ "visibility": "internal" } ], - "src": "11282:6:0" + "src": "11310:6:0" }, - "scope": 1076, - "src": "11235:234:0", + "scope": 1080, + "src": "11263:234:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 967, + "id": 971, "nodeType": "Block", - "src": "11522:62:0", + "src": "11550:62:0", "statements": [ { "expression": { @@ -13215,7 +13253,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 965, + "id": 969, "isConstant": false, "isLValue": false, "isPure": false, @@ -13226,19 +13264,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 962, + "id": 966, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 960, + "id": 964, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, - "src": "11539:3:0", + "referencedDeclaration": 1249, + "src": "11567:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13248,18 +13286,18 @@ "operator": ">=", "rightExpression": { "argumentTypes": null, - "id": 961, + "id": 965, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "11546:8:0", + "src": "11574:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11539:15:0", + "src": "11567:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13269,7 +13307,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 964, + "id": 968, "isConstant": false, "isLValue": false, "isPure": false, @@ -13277,15 +13315,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "11558:19:0", + "src": "11586:19:0", "subExpression": { "argumentTypes": null, - "id": 963, + "id": 967, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "11559:18:0", + "src": "11587:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13296,21 +13334,21 @@ "typeString": "bool" } }, - "src": "11539:38:0", + "src": "11567:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 959, - "id": 966, + "functionReturnParameters": 963, + "id": 970, "nodeType": "Return", - "src": "11532:45:0" + "src": "11560:45:0" } ] }, "documentation": null, - "id": 968, + "id": 972, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13318,23 +13356,23 @@ "name": "isFailed", "nodeType": "FunctionDefinition", "parameters": { - "id": 956, + "id": 960, "nodeType": "ParameterList", "parameters": [], - "src": "11492:2:0" + "src": "11520:2:0" }, "payable": false, "returnParameters": { - "id": 959, + "id": 963, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 958, + "id": 962, "name": "", "nodeType": "VariableDeclaration", - "scope": 968, - "src": "11516:4:0", + "scope": 972, + "src": "11544:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13342,10 +13380,10 @@ "typeString": "bool" }, "typeName": { - "id": 957, + "id": 961, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11516:4:0", + "src": "11544:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13355,19 +13393,19 @@ "visibility": "internal" } ], - "src": "11515:6:0" + "src": "11543:6:0" }, - "scope": 1076, - "src": "11475:109:0", + "scope": 1080, + "src": "11503:109:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 984, + "id": 988, "nodeType": "Block", - "src": "11703:90:0", + "src": "11731:90:0", "statements": [ { "expression": { @@ -13378,26 +13416,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 977, + "id": 981, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11721:12:0", + "src": "11749:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 979, + "id": 983, "indexExpression": { "argumentTypes": null, - "id": 978, + "id": 982, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "11734:18:0", + "referencedDeclaration": 974, + "src": "11762:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13408,13 +13446,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11721:32:0", + "src": "11749:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 980, + "id": 984, "isConstant": false, "isLValue": true, "isPure": false, @@ -13422,21 +13460,21 @@ "memberName": "milestoneNoVotes", "nodeType": "MemberAccess", "referencedDeclaration": 25, - "src": "11721:49:0", + "src": "11749:49:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_bool_$dyn_storage", "typeString": "bool[] storage ref" } }, - "id": 982, + "id": 986, "indexExpression": { "argumentTypes": null, - "id": 981, + "id": 985, "name": "milestoneIndex", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "11771:14:0", + "referencedDeclaration": 976, + "src": "11799:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13447,21 +13485,21 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11721:65:0", + "src": "11749:65:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 976, - "id": 983, + "functionReturnParameters": 980, + "id": 987, "nodeType": "Return", - "src": "11714:72:0" + "src": "11742:72:0" } ] }, "documentation": null, - "id": 985, + "id": 989, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13469,16 +13507,16 @@ "name": "getContributorMilestoneVote", "nodeType": "FunctionDefinition", "parameters": { - "id": 973, + "id": 977, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 970, + "id": 974, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 985, - "src": "11627:26:0", + "scope": 989, + "src": "11655:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13486,10 +13524,10 @@ "typeString": "address" }, "typeName": { - "id": 969, + "id": 973, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11627:7:0", + "src": "11655:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13500,11 +13538,11 @@ }, { "constant": false, - "id": 972, + "id": 976, "name": "milestoneIndex", "nodeType": "VariableDeclaration", - "scope": 985, - "src": "11655:19:0", + "scope": 989, + "src": "11683:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13512,10 +13550,10 @@ "typeString": "uint256" }, "typeName": { - "id": 971, + "id": 975, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11655:4:0", + "src": "11683:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13525,20 +13563,20 @@ "visibility": "internal" } ], - "src": "11626:49:0" + "src": "11654:49:0" }, "payable": false, "returnParameters": { - "id": 976, + "id": 980, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 975, + "id": 979, "name": "", "nodeType": "VariableDeclaration", - "scope": 985, - "src": "11697:4:0", + "scope": 989, + "src": "11725:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13546,10 +13584,10 @@ "typeString": "bool" }, "typeName": { - "id": 974, + "id": 978, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11697:4:0", + "src": "11725:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13559,19 +13597,19 @@ "visibility": "internal" } ], - "src": "11696:6:0" + "src": "11724:6:0" }, - "scope": 1076, - "src": "11590:203:0", + "scope": 1080, + "src": "11618:203:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 997, + "id": 1001, "nodeType": "Block", - "src": "11896:75:0", + "src": "11924:75:0", "statements": [ { "expression": { @@ -13580,26 +13618,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 992, + "id": 996, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11913:12:0", + "src": "11941:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 994, + "id": 998, "indexExpression": { "argumentTypes": null, - "id": 993, + "id": 997, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 987, - "src": "11926:18:0", + "referencedDeclaration": 991, + "src": "11954:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13610,13 +13648,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11913:32:0", + "src": "11941:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 995, + "id": 999, "isConstant": false, "isLValue": true, "isPure": false, @@ -13624,21 +13662,21 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "11913:51:0", + "src": "11941:51:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 991, - "id": 996, + "functionReturnParameters": 995, + "id": 1000, "nodeType": "Return", - "src": "11906:58:0" + "src": "11934:58:0" } ] }, "documentation": null, - "id": 998, + "id": 1002, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13646,16 +13684,16 @@ "name": "getContributorContributionAmount", "nodeType": "FunctionDefinition", "parameters": { - "id": 988, + "id": 992, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 987, + "id": 991, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 998, - "src": "11841:26:0", + "scope": 1002, + "src": "11869:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13663,10 +13701,10 @@ "typeString": "address" }, "typeName": { - "id": 986, + "id": 990, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11841:7:0", + "src": "11869:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -13676,20 +13714,20 @@ "visibility": "internal" } ], - "src": "11840:28:0" + "src": "11868:28:0" }, "payable": false, "returnParameters": { - "id": 991, + "id": 995, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 990, + "id": 994, "name": "", "nodeType": "VariableDeclaration", - "scope": 998, - "src": "11890:4:0", + "scope": 1002, + "src": "11918:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13697,10 +13735,10 @@ "typeString": "uint256" }, "typeName": { - "id": 989, + "id": 993, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11890:4:0", + "src": "11918:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13710,19 +13748,19 @@ "visibility": "internal" } ], - "src": "11889:6:0" + "src": "11917:6:0" }, - "scope": 1076, - "src": "11799:172:0", + "scope": 1080, + "src": "11827:172:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1007, + "id": 1011, "nodeType": "Block", - "src": "12031:42:0", + "src": "12059:42:0", "statements": [ { "expression": { @@ -13730,12 +13768,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1004, + "id": 1008, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "12053:12:0", + "src": "12081:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -13749,20 +13787,20 @@ "typeString": "enum CrowdFund.FreezeReason" } ], - "id": 1003, + "id": 1007, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "12048:4:0", + "src": "12076:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint" }, - "id": 1005, + "id": 1009, "isConstant": false, "isLValue": false, "isPure": false, @@ -13770,21 +13808,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12048:18:0", + "src": "12076:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 1002, - "id": 1006, + "functionReturnParameters": 1006, + "id": 1010, "nodeType": "Return", - "src": "12041:25:0" + "src": "12069:25:0" } ] }, "documentation": null, - "id": 1008, + "id": 1012, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -13792,23 +13830,23 @@ "name": "getFreezeReason", "nodeType": "FunctionDefinition", "parameters": { - "id": 999, + "id": 1003, "nodeType": "ParameterList", "parameters": [], - "src": "12001:2:0" + "src": "12029:2:0" }, "payable": false, "returnParameters": { - "id": 1002, + "id": 1006, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1001, + "id": 1005, "name": "", "nodeType": "VariableDeclaration", - "scope": 1008, - "src": "12025:4:0", + "scope": 1012, + "src": "12053:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -13816,10 +13854,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1000, + "id": 1004, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "12025:4:0", + "src": "12053:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -13829,19 +13867,19 @@ "visibility": "internal" } ], - "src": "12024:6:0" + "src": "12052:6:0" }, - "scope": 1076, - "src": "11977:96:0", + "scope": 1080, + "src": "12005:96:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1016, + "id": 1020, "nodeType": "Block", - "src": "12101:70:0", + "src": "12129:70:0", "statements": [ { "expression": { @@ -13849,12 +13887,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1011, + "id": 1015, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12119:6:0", + "src": "12147:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13863,14 +13901,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 1012, + "id": 1016, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12127:25:0", + "src": "12155:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -13890,21 +13928,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 1010, + "id": 1014, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12111:7:0", + "referencedDeclaration": 1251, + "src": "12139:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1013, + "id": 1017, "isConstant": false, "isLValue": false, "isPure": false, @@ -13912,41 +13950,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12111:42:0", + "src": "12139:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1014, + "id": 1018, "nodeType": "ExpressionStatement", - "src": "12111:42:0" + "src": "12139:42:0" }, { - "id": 1015, + "id": 1019, "nodeType": "PlaceholderStatement", - "src": "12163:1:0" + "src": "12191:1:0" } ] }, "documentation": null, - "id": 1017, + "id": 1021, "name": "onlyFrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1009, + "id": 1013, "nodeType": "ParameterList", "parameters": [], - "src": "12098:2:0" + "src": "12126:2:0" }, - "src": "12079:92:0", + "src": "12107:92:0", "visibility": "internal" }, { "body": { - "id": 1026, + "id": 1030, "nodeType": "Block", - "src": "12201:67:0", + "src": "12229:67:0", "statements": [ { "expression": { @@ -13954,7 +13992,7 @@ "arguments": [ { "argumentTypes": null, - "id": 1021, + "id": 1025, "isConstant": false, "isLValue": false, "isPure": false, @@ -13962,15 +14000,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12219:7:0", + "src": "12247:7:0", "subExpression": { "argumentTypes": null, - "id": 1020, + "id": 1024, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12220:6:0", + "src": "12248:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -13984,14 +14022,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e642069732066726f7a656e", - "id": 1022, + "id": 1026, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12228:21:0", + "src": "12256:21:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_21ebfed987d130de5e469bef5346c6c759f8769c3909e5f178aa85e98366503d", @@ -14011,21 +14049,21 @@ "typeString": "literal_string \"CrowdFund is frozen\"" } ], - "id": 1019, + "id": 1023, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12211:7:0", + "referencedDeclaration": 1251, + "src": "12239:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1023, + "id": 1027, "isConstant": false, "isLValue": false, "isPure": false, @@ -14033,41 +14071,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12211:39:0", + "src": "12239:39:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1024, + "id": 1028, "nodeType": "ExpressionStatement", - "src": "12211:39:0" + "src": "12239:39:0" }, { - "id": 1025, + "id": 1029, "nodeType": "PlaceholderStatement", - "src": "12260:1:0" + "src": "12288:1:0" } ] }, "documentation": null, - "id": 1027, + "id": 1031, "name": "onlyUnfrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1018, + "id": 1022, "nodeType": "ParameterList", "parameters": [], - "src": "12198:2:0" + "src": "12226:2:0" }, - "src": "12177:91:0", + "src": "12205:91:0", "visibility": "internal" }, { "body": { - "id": 1035, + "id": 1039, "nodeType": "Block", - "src": "12296:84:0", + "src": "12324:84:0", "statements": [ { "expression": { @@ -14075,12 +14113,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1030, + "id": 1034, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12314:18:0", + "src": "12342:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14089,14 +14127,14 @@ { "argumentTypes": null, "hexValue": "526169736520676f616c206973206e6f742072656163686564", - "id": 1031, + "id": 1035, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12334:27:0", + "src": "12362:27:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_d65d4721f73624ca6e381e7ad4c000f40a20c0abe88c0be62360bb906d10ffbe", @@ -14116,21 +14154,21 @@ "typeString": "literal_string \"Raise goal is not reached\"" } ], - "id": 1029, + "id": 1033, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12306:7:0", + "referencedDeclaration": 1251, + "src": "12334:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1032, + "id": 1036, "isConstant": false, "isLValue": false, "isPure": false, @@ -14138,41 +14176,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12306:56:0", + "src": "12334:56:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1033, + "id": 1037, "nodeType": "ExpressionStatement", - "src": "12306:56:0" + "src": "12334:56:0" }, { - "id": 1034, + "id": 1038, "nodeType": "PlaceholderStatement", - "src": "12372:1:0" + "src": "12400:1:0" } ] }, "documentation": null, - "id": 1036, + "id": 1040, "name": "onlyRaised", "nodeType": "ModifierDefinition", "parameters": { - "id": 1028, + "id": 1032, "nodeType": "ParameterList", "parameters": [], - "src": "12293:2:0" + "src": "12321:2:0" }, - "src": "12274:106:0", + "src": "12302:106:0", "visibility": "internal" }, { "body": { - "id": 1049, + "id": 1053, "nodeType": "Block", - "src": "12409:103:0", + "src": "12437:103:0", "statements": [ { "expression": { @@ -14184,7 +14222,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 1044, + "id": 1048, "isConstant": false, "isLValue": false, "isPure": false, @@ -14195,19 +14233,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1041, + "id": 1045, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 1039, + "id": 1043, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, - "src": "12427:3:0", + "referencedDeclaration": 1249, + "src": "12455:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14217,18 +14255,18 @@ "operator": "<=", "rightExpression": { "argumentTypes": null, - "id": 1040, + "id": 1044, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "12434:8:0", + "src": "12462:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12427:15:0", + "src": "12455:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14238,7 +14276,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 1043, + "id": 1047, "isConstant": false, "isLValue": false, "isPure": false, @@ -14246,15 +14284,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12446:19:0", + "src": "12474:19:0", "subExpression": { "argumentTypes": null, - "id": 1042, + "id": 1046, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12447:18:0", + "src": "12475:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14265,7 +14303,7 @@ "typeString": "bool" } }, - "src": "12427:38:0", + "src": "12455:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14274,14 +14312,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f74206f6e676f696e67", - "id": 1045, + "id": 1049, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12467:26:0", + "src": "12495:26:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_843cc2d7a1ba19041b40561b89d21c7571d29e5c5e2d0d1510f441aea3fc1747", @@ -14301,21 +14339,21 @@ "typeString": "literal_string \"CrowdFund is not ongoing\"" } ], - "id": 1038, + "id": 1042, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12419:7:0", + "referencedDeclaration": 1251, + "src": "12447:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1046, + "id": 1050, "isConstant": false, "isLValue": false, "isPure": false, @@ -14323,41 +14361,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12419:75:0", + "src": "12447:75:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1047, + "id": 1051, "nodeType": "ExpressionStatement", - "src": "12419:75:0" + "src": "12447:75:0" }, { - "id": 1048, + "id": 1052, "nodeType": "PlaceholderStatement", - "src": "12504:1:0" + "src": "12532:1:0" } ] }, "documentation": null, - "id": 1050, + "id": 1054, "name": "onlyOnGoing", "nodeType": "ModifierDefinition", "parameters": { - "id": 1037, + "id": 1041, "nodeType": "ParameterList", "parameters": [], - "src": "12406:2:0" + "src": "12434:2:0" }, - "src": "12386:126:0", + "src": "12414:126:0", "visibility": "internal" }, { "body": { - "id": 1064, + "id": 1068, "nodeType": "Block", - "src": "12545:116:0", + "src": "12573:116:0", "statements": [ { "expression": { @@ -14369,7 +14407,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1059, + "id": 1063, "isConstant": false, "isLValue": false, "isPure": false, @@ -14380,34 +14418,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 1053, + "id": 1057, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "12563:12:0", + "src": "12591:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 1056, + "id": 1060, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1054, + "id": 1058, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "12576:3:0", + "referencedDeclaration": 1247, + "src": "12604:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1055, + "id": 1059, "isConstant": false, "isLValue": false, "isPure": false, @@ -14415,7 +14453,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12576:10:0", + "src": "12604:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -14426,13 +14464,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12563:24:0", + "src": "12591:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 1057, + "id": 1061, "isConstant": false, "isLValue": true, "isPure": false, @@ -14440,7 +14478,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "12563:43:0", + "src": "12591:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -14451,14 +14489,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 1058, + "id": 1062, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "12610:1:0", + "src": "12638:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -14466,7 +14504,7 @@ }, "value": "0" }, - "src": "12563:48:0", + "src": "12591:48:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14475,14 +14513,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f74206120636f6e7472696275746f72", - "id": 1060, + "id": 1064, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12613:29:0", + "src": "12641:29:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_27c7012fc5b199883f3d6c1e7d0d3c9cd967752b2ed8ba1703713f2d84425e7b", @@ -14502,21 +14540,21 @@ "typeString": "literal_string \"Caller is not a contributor\"" } ], - "id": 1052, + "id": 1056, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12555:7:0", + "referencedDeclaration": 1251, + "src": "12583:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1061, + "id": 1065, "isConstant": false, "isLValue": false, "isPure": false, @@ -14524,41 +14562,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12555:88:0", + "src": "12583:88:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1062, + "id": 1066, "nodeType": "ExpressionStatement", - "src": "12555:88:0" + "src": "12583:88:0" }, { - "id": 1063, + "id": 1067, "nodeType": "PlaceholderStatement", - "src": "12653:1:0" + "src": "12681:1:0" } ] }, "documentation": null, - "id": 1065, + "id": 1069, "name": "onlyContributor", "nodeType": "ModifierDefinition", "parameters": { - "id": 1051, + "id": 1055, "nodeType": "ParameterList", "parameters": [], - "src": "12542:2:0" + "src": "12570:2:0" }, - "src": "12518:143:0", + "src": "12546:143:0", "visibility": "internal" }, { "body": { - "id": 1074, + "id": 1078, "nodeType": "Block", - "src": "12690:81:0", + "src": "12718:81:0", "statements": [ { "expression": { @@ -14569,18 +14607,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 1068, + "id": 1072, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 955, - "src": "12708:15:0", + "referencedDeclaration": 959, + "src": "12736:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 1069, + "id": 1073, "isConstant": false, "isLValue": false, "isPure": false, @@ -14588,7 +14626,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12708:17:0", + "src": "12736:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -14597,14 +14635,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f7420612074727573746565", - "id": 1070, + "id": 1074, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12727:25:0", + "src": "12755:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_efecdf3be8b72bfbf67a07f441dfdb20b968592ad6d7fba48a91dfa72a34f2d8", @@ -14624,21 +14662,21 @@ "typeString": "literal_string \"Caller is not a trustee\"" } ], - "id": 1067, + "id": 1071, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12700:7:0", + "referencedDeclaration": 1251, + "src": "12728:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1071, + "id": 1075, "isConstant": false, "isLValue": false, "isPure": false, @@ -14646,51 +14684,51 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12700:53:0", + "src": "12728:53:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1072, + "id": 1076, "nodeType": "ExpressionStatement", - "src": "12700:53:0" + "src": "12728:53:0" }, { - "id": 1073, + "id": 1077, "nodeType": "PlaceholderStatement", - "src": "12763:1:0" + "src": "12791:1:0" } ] }, "documentation": null, - "id": 1075, + "id": 1079, "name": "onlyTrustee", "nodeType": "ModifierDefinition", "parameters": { - "id": 1066, + "id": 1070, "nodeType": "ParameterList", "parameters": [], - "src": "12687:2:0" + "src": "12715:2:0" }, - "src": "12667:104:0", + "src": "12695:104:0", "visibility": "internal" } ], - "scope": 1077, - "src": "87:12687:0" + "scope": 1081, + "src": "87:12715:0" } ], - "src": "0:12775:0" + "src": "0:12802:0" }, "legacyAST": { - "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", "exportedSymbols": { "CrowdFund": [ - 1076 + 1080 ] }, - "id": 1077, + "id": 1081, "nodeType": "SourceUnit", "nodes": [ { @@ -14709,8 +14747,8 @@ "file": "openzeppelin-solidity/contracts/math/SafeMath.sol", "id": 2, "nodeType": "ImportDirective", - "scope": 1077, - "sourceUnit": 1229, + "scope": 1081, + "sourceUnit": 1233, "src": "25:59:0", "symbolAliases": [], "unitAlias": "" @@ -14721,9 +14759,9 @@ "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1076, + "id": 1080, "linearizedBaseContracts": [ - 1076 + 1080 ], "name": "CrowdFund", "nodeType": "ContractDefinition", @@ -14735,10 +14773,10 @@ "id": 3, "name": "SafeMath", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1228, + "referencedDeclaration": 1232, "src": "118:8:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_SafeMath_$1228", + "typeIdentifier": "t_contract$_SafeMath_$1232", "typeString": "library SafeMath" } }, @@ -14787,7 +14825,7 @@ "id": 11, "name": "freezeReason", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "264:25:0", "stateVariable": true, "storageLocation": "default", @@ -14921,7 +14959,7 @@ ], "name": "Milestone", "nodeType": "StructDefinition", - "scope": 1076, + "scope": 1080, "src": "296:144:0", "visibility": "public" }, @@ -15046,7 +15084,7 @@ ], "name": "Contributor", "nodeType": "StructDefinition", - "scope": 1076, + "scope": 1080, "src": "446:197:0", "visibility": "public" }, @@ -15193,7 +15231,7 @@ "id": 44, "name": "frozen", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "776:18:0", "stateVariable": true, "storageLocation": "default", @@ -15219,7 +15257,7 @@ "id": 46, "name": "isRaiseGoalReached", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "800:30:0", "stateVariable": true, "storageLocation": "default", @@ -15245,7 +15283,7 @@ "id": 48, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "836:41:0", "stateVariable": true, "storageLocation": "default", @@ -15271,7 +15309,7 @@ "id": 50, "name": "milestoneVotingPeriod", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "883:33:0", "stateVariable": true, "storageLocation": "default", @@ -15297,7 +15335,7 @@ "id": 52, "name": "deadline", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "922:20:0", "stateVariable": true, "storageLocation": "default", @@ -15323,7 +15361,7 @@ "id": 54, "name": "raiseGoal", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "948:21:0", "stateVariable": true, "storageLocation": "default", @@ -15349,7 +15387,7 @@ "id": 56, "name": "amountRaised", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "975:24:0", "stateVariable": true, "storageLocation": "default", @@ -15375,7 +15413,7 @@ "id": 58, "name": "frozenBalance", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1005:25:0", "stateVariable": true, "storageLocation": "default", @@ -15401,7 +15439,7 @@ "id": 60, "name": "minimumContributionAmount", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1036:37:0", "stateVariable": true, "storageLocation": "default", @@ -15427,7 +15465,7 @@ "id": 62, "name": "amountVotingForRefund", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1079:33:0", "stateVariable": true, "storageLocation": "default", @@ -15453,7 +15491,7 @@ "id": 64, "name": "beneficiary", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1118:26:0", "stateVariable": true, "storageLocation": "default", @@ -15479,7 +15517,7 @@ "id": 68, "name": "contributors", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1150:51:0", "stateVariable": true, "storageLocation": "default", @@ -15526,7 +15564,7 @@ "id": 71, "name": "contributorList", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1207:32:0", "stateVariable": true, "storageLocation": "default", @@ -15562,7 +15600,7 @@ "id": 74, "name": "trustees", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1302:25:0", "stateVariable": true, "storageLocation": "default", @@ -15598,7 +15636,7 @@ "id": 77, "name": "milestones", "nodeType": "VariableDeclaration", - "scope": 1076, + "scope": 1080, "src": "1401:29:0", "stateVariable": true, "storageLocation": "default", @@ -15725,10 +15763,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "1689:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -15942,10 +15980,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "1767:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -16159,10 +16197,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "1894:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -16411,10 +16449,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "2338:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -16506,7 +16544,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "2440:18:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -16935,10 +16973,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "2713:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -17192,7 +17230,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "3026:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -17752,7 +17790,7 @@ "parameters": [], "src": "1679:0:0" }, - "scope": 1076, + "scope": 1080, "src": "1437:1931:0", "stateMutability": "nonpayable", "superFunction": null, @@ -17808,7 +17846,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "3521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -17857,7 +17895,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "3504:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -17964,10 +18002,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "3541:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -18044,7 +18082,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4076:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18253,10 +18291,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "4186:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -18319,7 +18357,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4393:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18430,7 +18468,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4776:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18489,7 +18527,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4857:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18544,7 +18582,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4822:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18597,7 +18635,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "4809:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -18670,7 +18708,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4457:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18715,7 +18753,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4521:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -18913,7 +18951,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "4713:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -19157,7 +19195,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "5033:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -19186,7 +19224,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "5045:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -19265,7 +19303,7 @@ "name": "onlyOnGoing", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1050, + "referencedDeclaration": 1054, "src": "3411:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -19284,7 +19322,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, + "referencedDeclaration": 1031, "src": "3423:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -19310,7 +19348,7 @@ "parameters": [], "src": "3436:0:0" }, - "scope": 1076, + "scope": 1080, "src": "3374:1688:0", "stateMutability": "payable", "superFunction": null, @@ -19522,7 +19560,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "5301:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -19642,7 +19680,7 @@ "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 924, + "referencedDeclaration": 928, "src": "5343:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", @@ -19733,10 +19771,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "5460:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -20303,10 +20341,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "5721:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -20598,7 +20636,7 @@ "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1169, + "referencedDeclaration": 1173, "src": "6660:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -20633,7 +20671,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "6652:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -20647,7 +20685,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "6652:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -20873,7 +20911,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "6326:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -20887,7 +20925,7 @@ "lValueRequested": false, "memberName": "add", "nodeType": "MemberAccess", - "referencedDeclaration": 1227, + "referencedDeclaration": 1231, "src": "6326:7:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -21045,7 +21083,7 @@ "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1075, + "referencedDeclaration": 1079, "src": "5120:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -21064,7 +21102,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1036, + "referencedDeclaration": 1040, "src": "5132:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -21083,7 +21121,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, + "referencedDeclaration": 1031, "src": "5143:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -21136,7 +21174,7 @@ "parameters": [], "src": "5156:0:0" }, - "scope": 1076, + "scope": 1080, "src": "5068:1638:0", "stateMutability": "nonpayable", "superFunction": null, @@ -21144,9 +21182,9 @@ }, { "body": { - "id": 589, + "id": 591, "nodeType": "Block", - "src": "6811:930:0", + "src": "6811:940:0", "statements": [ { "assignments": [ @@ -21158,7 +21196,7 @@ "id": 494, "name": "existingMilestoneNoVote", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "6821:28:0", "stateVariable": false, "storageLocation": "default", @@ -21209,7 +21247,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "6865:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -21366,10 +21404,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "6910:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -21404,7 +21442,7 @@ "id": 511, "name": "milestoneVotingStarted", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "7017:27:0", "stateVariable": false, "storageLocation": "default", @@ -21533,7 +21571,7 @@ "id": 520, "name": "votePeriodHasEnded", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "7104:23:0", "stateVariable": false, "storageLocation": "default", @@ -21631,7 +21669,7 @@ "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, + "referencedDeclaration": 1249, "src": "7177:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -21657,7 +21695,7 @@ "id": 529, "name": "onGoingVote", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "7190:16:0", "stateVariable": false, "storageLocation": "default", @@ -21795,10 +21833,10 @@ "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, + "referencedDeclaration": 1251, "src": "7264:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", @@ -21859,7 +21897,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "7340:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -21986,258 +22024,277 @@ } }, "falseBody": { - "id": 587, - "nodeType": "Block", - "src": "7572:163:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 585, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { + "condition": { + "argumentTypes": null, + "id": 570, + "name": "vote", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 484, + "src": "7576:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 589, + "nodeType": "IfStatement", + "src": "7572:173:0", + "trueBody": { + "id": 588, + "nodeType": "Block", + "src": "7582:163:0", + "statements": [ + { + "expression": { "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 570, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7586:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 572, - "indexExpression": { - "argumentTypes": null, - "id": 571, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7597:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7586:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" - } - }, - "id": 573, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7586:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 579, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "7680:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 582, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 580, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "7693:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 581, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "7693:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7680:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 583, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "7680:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 574, - "name": "milestones", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 77, - "src": "7632:10:0", - "typeDescriptions": { - "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", - "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" - } - }, - "id": 576, - "indexExpression": { - "argumentTypes": null, - "id": 575, - "name": "index", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 482, - "src": "7643:5:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "7632:17:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Milestone_$20_storage", - "typeString": "struct CrowdFund.Milestone storage ref" - } - }, - "id": 577, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "amountVotingAgainstPayout", - "nodeType": "MemberAccess", - "referencedDeclaration": 15, - "src": "7632:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 578, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1227, - "src": "7632:47:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 584, + "id": 586, "isConstant": false, "isLValue": false, "isPure": false, - "kind": "functionCall", "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "7632:92:0", + "leftHandSide": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 571, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7596:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 573, + "indexExpression": { + "argumentTypes": null, + "id": 572, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7607:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7596:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" + } + }, + "id": 574, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7596:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 580, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "7690:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 583, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 581, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1247, + "src": "7703:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "7703:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7690:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 584, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "7690:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 575, + "name": "milestones", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "7642:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", + "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" + } + }, + "id": 577, + "indexExpression": { + "argumentTypes": null, + "id": 576, + "name": "index", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 482, + "src": "7653:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "7642:17:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Milestone_$20_storage", + "typeString": "struct CrowdFund.Milestone storage ref" + } + }, + "id": 578, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amountVotingAgainstPayout", + "nodeType": "MemberAccess", + "referencedDeclaration": 15, + "src": "7642:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 579, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 1231, + "src": "7642:47:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7642:92:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7596:138:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7586:138:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 586, - "nodeType": "ExpressionStatement", - "src": "7586:138:0" - } - ] + "id": 587, + "nodeType": "ExpressionStatement", + "src": "7596:138:0" + } + ] + } }, - "id": 588, + "id": 590, "nodeType": "IfStatement", - "src": "7392:343:0", + "src": "7392:353:0", "trueBody": { "id": 569, "nodeType": "Block", @@ -22338,7 +22395,7 @@ "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, + "referencedDeclaration": 1247, "src": "7524:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", @@ -22455,7 +22512,7 @@ "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1203, + "referencedDeclaration": 1207, "src": "7463:47:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", @@ -22492,7 +22549,7 @@ ] }, "documentation": null, - "id": 590, + "id": 592, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -22506,7 +22563,7 @@ "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1065, + "referencedDeclaration": 1069, "src": "6771:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -22525,7 +22582,7 @@ "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1036, + "referencedDeclaration": 1040, "src": "6787:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -22544,7 +22601,7 @@ "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, + "referencedDeclaration": 1031, "src": "6798:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", @@ -22566,7 +22623,7 @@ "id": 482, "name": "index", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "6741:10:0", "stateVariable": false, "storageLocation": "default", @@ -22592,7 +22649,7 @@ "id": 484, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 590, + "scope": 592, "src": "6753:9:0", "stateVariable": false, "storageLocation": "default", @@ -22623,30 +22680,30 @@ "parameters": [], "src": "6811:0:0" }, - "scope": 1076, - "src": "6712:1029:0", + "scope": 1080, + "src": "6712:1039:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 676, + "id": 678, "nodeType": "Block", - "src": "7818:890:0", + "src": "7828:890:0", "statements": [ { "assignments": [ - 600 + 602 ], "declarations": [ { "constant": false, - "id": 600, + "id": 602, "name": "voteDeadlineHasPassed", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "7828:26:0", + "scope": 679, + "src": "7838:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22654,10 +22711,10 @@ "typeString": "bool" }, "typeName": { - "id": 599, + "id": 601, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7828:4:0", + "src": "7838:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22667,14 +22724,14 @@ "visibility": "internal" } ], - "id": 607, + "id": 609, "initialValue": { "argumentTypes": null, "commonType": { "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 606, + "id": 608, "isConstant": false, "isLValue": false, "isPure": false, @@ -22685,26 +22742,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 601, + "id": 603, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7857:10:0", + "src": "7867:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 603, + "id": 605, "indexExpression": { "argumentTypes": null, - "id": 602, + "id": 604, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "7868:5:0", + "referencedDeclaration": 594, + "src": "7878:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22715,13 +22772,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7857:17:0", + "src": "7867:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 604, + "id": 606, "isConstant": false, "isLValue": true, "isPure": false, @@ -22729,7 +22786,7 @@ "memberName": "payoutRequestVoteDeadline", "nodeType": "MemberAccess", "referencedDeclaration": 17, - "src": "7857:43:0", + "src": "7867:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22739,38 +22796,38 @@ "operator": "<", "rightExpression": { "argumentTypes": null, - "id": 605, + "id": 607, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, - "src": "7903:3:0", + "referencedDeclaration": 1249, + "src": "7913:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "7857:49:0", + "src": "7867:49:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7828:78:0" + "src": "7838:78:0" }, { "assignments": [ - 609 + 611 ], "declarations": [ { "constant": false, - "id": 609, + "id": 611, "name": "majorityVotedNo", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "7916:20:0", + "scope": 679, + "src": "7926:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22778,10 +22835,10 @@ "typeString": "bool" }, "typeName": { - "id": 608, + "id": 610, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "7916:4:0", + "src": "7926:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22791,7 +22848,7 @@ "visibility": "internal" } ], - "id": 616, + "id": 618, "initialValue": { "argumentTypes": null, "arguments": [ @@ -22801,26 +22858,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 611, + "id": 613, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "7956:10:0", + "src": "7966:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 613, + "id": 615, "indexExpression": { "argumentTypes": null, - "id": 612, + "id": 614, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "7967:5:0", + "referencedDeclaration": 594, + "src": "7977:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22831,13 +22888,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "7956:17:0", + "src": "7966:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 614, + "id": 616, "isConstant": false, "isLValue": true, "isPure": false, @@ -22845,7 +22902,7 @@ "memberName": "amountVotingAgainstPayout", "nodeType": "MemberAccess", "referencedDeclaration": 15, - "src": "7956:43:0", + "src": "7966:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22859,18 +22916,18 @@ "typeString": "uint256" } ], - "id": 610, + "id": 612, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 924, - "src": "7939:16:0", + "referencedDeclaration": 928, + "src": "7949:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 615, + "id": 617, "isConstant": false, "isLValue": false, "isPure": false, @@ -22878,27 +22935,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "7939:61:0", + "src": "7949:61:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "7916:84:0" + "src": "7926:84:0" }, { "assignments": [ - 618 + 620 ], "declarations": [ { "constant": false, - "id": 618, + "id": 620, "name": "milestoneAlreadyPaid", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "8010:25:0", + "scope": 679, + "src": "8020:25:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -22906,10 +22963,10 @@ "typeString": "bool" }, "typeName": { - "id": 617, + "id": 619, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8010:4:0", + "src": "8020:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -22919,33 +22976,33 @@ "visibility": "internal" } ], - "id": 623, + "id": 625, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 619, + "id": 621, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8038:10:0", + "src": "8048:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 621, + "id": 623, "indexExpression": { "argumentTypes": null, - "id": 620, + "id": 622, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8049:5:0", + "referencedDeclaration": 594, + "src": "8059:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -22956,13 +23013,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8038:17:0", + "src": "8048:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 622, + "id": 624, "isConstant": false, "isLValue": true, "isPure": false, @@ -22970,14 +23027,14 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8038:22:0", + "src": "8048:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8010:50:0" + "src": "8020:50:0" }, { "condition": { @@ -22986,7 +23043,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 630, + "id": 632, "isConstant": false, "isLValue": false, "isPure": false, @@ -22997,19 +23054,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 627, + "id": 629, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 624, + "id": 626, "name": "voteDeadlineHasPassed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 600, - "src": "8074:21:0", + "referencedDeclaration": 602, + "src": "8084:21:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23019,7 +23076,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 626, + "id": 628, "isConstant": false, "isLValue": false, "isPure": false, @@ -23027,15 +23084,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8099:16:0", + "src": "8109:16:0", "subExpression": { "argumentTypes": null, - "id": 625, + "id": 627, "name": "majorityVotedNo", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 609, - "src": "8100:15:0", + "referencedDeclaration": 611, + "src": "8110:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23046,7 +23103,7 @@ "typeString": "bool" } }, - "src": "8074:41:0", + "src": "8084:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23056,7 +23113,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 629, + "id": 631, "isConstant": false, "isLValue": false, "isPure": false, @@ -23064,15 +23121,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "8119:21:0", + "src": "8129:21:0", "subExpression": { "argumentTypes": null, - "id": 628, + "id": 630, "name": "milestoneAlreadyPaid", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 618, - "src": "8120:20:0", + "referencedDeclaration": 620, + "src": "8130:20:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23083,16 +23140,16 @@ "typeString": "bool" } }, - "src": "8074:66:0", + "src": "8084:66:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 674, + "id": 676, "nodeType": "Block", - "src": "8629:73:0", + "src": "8639:73:0", "statements": [ { "expression": { @@ -23101,14 +23158,14 @@ { "argumentTypes": null, "hexValue": "726571756972656420636f6e646974696f6e732077657265206e6f7420736174697366696564", - "id": 671, + "id": 673, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8650:40:0", + "src": "8660:40:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_c944a403407a4b450cdf033de02e1e093564ed6120fdd470c5daee653f2d6a87", @@ -23124,21 +23181,21 @@ "typeString": "literal_string \"required conditions were not satisfied\"" } ], - "id": 670, + "id": 672, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1248, - 1249 + 1252, + 1253 ], - "referencedDeclaration": 1249, - "src": "8643:6:0", + "referencedDeclaration": 1253, + "src": "8653:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 672, + "id": 674, "isConstant": false, "isLValue": false, "isPure": false, @@ -23146,30 +23203,30 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8643:48:0", + "src": "8653:48:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 673, + "id": 675, "nodeType": "ExpressionStatement", - "src": "8643:48:0" + "src": "8653:48:0" } ] }, - "id": 675, + "id": 677, "nodeType": "IfStatement", - "src": "8070:632:0", + "src": "8080:632:0", "trueBody": { - "id": 669, + "id": 671, "nodeType": "Block", - "src": "8142:481:0", + "src": "8152:481:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 636, + "id": 638, "isConstant": false, "isLValue": false, "isPure": false, @@ -23180,26 +23237,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 631, + "id": 633, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8156:10:0", + "src": "8166:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 633, + "id": 635, "indexExpression": { "argumentTypes": null, - "id": 632, + "id": 634, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8167:5:0", + "referencedDeclaration": 594, + "src": "8177:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23210,13 +23267,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8156:17:0", + "src": "8166:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 634, + "id": 636, "isConstant": false, "isLValue": true, "isPure": false, @@ -23224,7 +23281,7 @@ "memberName": "paid", "nodeType": "MemberAccess", "referencedDeclaration": 19, - "src": "8156:22:0", + "src": "8166:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23235,14 +23292,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 635, + "id": 637, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "8181:4:0", + "src": "8191:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -23250,28 +23307,28 @@ }, "value": "true" }, - "src": "8156:29:0", + "src": "8166:29:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 637, + "id": 639, "nodeType": "ExpressionStatement", - "src": "8156:29:0" + "src": "8166:29:0" }, { "assignments": [ - 639 + 641 ], "declarations": [ { "constant": false, - "id": 639, + "id": 641, "name": "amount", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "8199:11:0", + "scope": 679, + "src": "8209:11:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23279,10 +23336,10 @@ "typeString": "uint256" }, "typeName": { - "id": 638, + "id": 640, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "8199:4:0", + "src": "8209:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23292,33 +23349,33 @@ "visibility": "internal" } ], - "id": 644, + "id": 646, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 640, + "id": 642, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8213:10:0", + "src": "8223:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 642, + "id": 644, "indexExpression": { "argumentTypes": null, - "id": 641, + "id": 643, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8224:5:0", + "referencedDeclaration": 594, + "src": "8234:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23329,13 +23386,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8213:17:0", + "src": "8223:17:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Milestone_$20_storage", "typeString": "struct CrowdFund.Milestone storage ref" } }, - "id": 643, + "id": 645, "isConstant": false, "isLValue": true, "isPure": false, @@ -23343,14 +23400,14 @@ "memberName": "amount", "nodeType": "MemberAccess", "referencedDeclaration": 13, - "src": "8213:24:0", + "src": "8223:24:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "8199:38:0" + "src": "8209:38:0" }, { "expression": { @@ -23358,12 +23415,12 @@ "arguments": [ { "argumentTypes": null, - "id": 648, + "id": 650, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 639, - "src": "8272:6:0", + "referencedDeclaration": 641, + "src": "8282:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23379,18 +23436,18 @@ ], "expression": { "argumentTypes": null, - "id": 645, + "id": 647, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8251:11:0", + "src": "8261:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 647, + "id": 649, "isConstant": false, "isLValue": false, "isPure": false, @@ -23398,13 +23455,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8251:20:0", + "src": "8261:20:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 649, + "id": 651, "isConstant": false, "isLValue": false, "isPure": false, @@ -23412,15 +23469,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8251:28:0", + "src": "8261:28:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 650, + "id": 652, "nodeType": "ExpressionStatement", - "src": "8251:28:0" + "src": "8261:28:0" }, { "eventCall": { @@ -23428,12 +23485,12 @@ "arguments": [ { "argumentTypes": null, - "id": 652, + "id": 654, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8308:11:0", + "src": "8318:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23441,12 +23498,12 @@ }, { "argumentTypes": null, - "id": 653, + "id": 655, "name": "amount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 639, - "src": "8321:6:0", + "referencedDeclaration": 641, + "src": "8331:6:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23464,18 +23521,18 @@ "typeString": "uint256" } ], - "id": 651, + "id": 653, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "8298:9:0", + "src": "8308:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 654, + "id": 656, "isConstant": false, "isLValue": false, "isPure": false, @@ -23483,15 +23540,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8298:30:0", + "src": "8308:30:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 655, + "id": 657, "nodeType": "EmitStatement", - "src": "8293:35:0" + "src": "8303:35:0" }, { "condition": { @@ -23500,7 +23557,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 662, + "id": 664, "isConstant": false, "isLValue": false, "isPure": false, @@ -23510,12 +23567,12 @@ "arguments": [ { "argumentTypes": null, - "id": 659, + "id": 661, "name": "index", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 592, - "src": "8420:5:0", + "referencedDeclaration": 594, + "src": "8430:5:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23533,18 +23590,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 656, + "id": 658, "name": "milestones", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 77, - "src": "8398:10:0", + "src": "8408:10:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_struct$_Milestone_$20_storage_$dyn_storage", "typeString": "struct CrowdFund.Milestone storage ref[] storage ref" } }, - "id": 657, + "id": 659, "isConstant": false, "isLValue": true, "isPure": false, @@ -23552,27 +23609,27 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8398:17:0", + "src": "8408:17:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 658, + "id": 660, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1203, - "src": "8398:21:0", + "referencedDeclaration": 1207, + "src": "8408:21:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 660, + "id": 662, "isConstant": false, "isLValue": false, "isPure": false, @@ -23580,7 +23637,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8398:28:0", + "src": "8408:28:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23591,14 +23648,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "31", - "id": 661, + "id": 663, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "8430:1:0", + "src": "8440:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_1_by_1", @@ -23606,20 +23663,20 @@ }, "value": "1" }, - "src": "8398:33:0", + "src": "8408:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 668, + "id": 670, "nodeType": "IfStatement", - "src": "8394:219:0", + "src": "8404:219:0", "trueBody": { - "id": 667, + "id": 669, "nodeType": "Block", - "src": "8433:180:0", + "src": "8443:180:0", "statements": [ { "expression": { @@ -23627,12 +23684,12 @@ "arguments": [ { "argumentTypes": null, - "id": 664, + "id": 666, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "8586:11:0", + "src": "8596:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23646,18 +23703,18 @@ "typeString": "address" } ], - "id": 663, + "id": 665, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1251, - "src": "8573:12:0", + "referencedDeclaration": 1255, + "src": "8583:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 665, + "id": 667, "isConstant": false, "isLValue": false, "isPure": false, @@ -23665,15 +23722,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8573:25:0", + "src": "8583:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 666, + "id": 668, "nodeType": "ExpressionStatement", - "src": "8573:25:0" + "src": "8583:25:0" } ] } @@ -23684,63 +23741,63 @@ ] }, "documentation": null, - "id": 677, + "id": 679, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ - { - "arguments": null, - "id": 595, - "modifierName": { - "argumentTypes": null, - "id": 594, - "name": "onlyRaised", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1036, - "src": "7794:10:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "7794:10:0" - }, { "arguments": null, "id": 597, "modifierName": { "argumentTypes": null, "id": 596, - "name": "onlyUnfrozen", + "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "7805:12:0", + "referencedDeclaration": 1040, + "src": "7804:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "7805:12:0" + "src": "7804:10:0" + }, + { + "arguments": null, + "id": 599, + "modifierName": { + "argumentTypes": null, + "id": 598, + "name": "onlyUnfrozen", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1031, + "src": "7815:12:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7815:12:0" } ], "name": "payMilestonePayout", "nodeType": "FunctionDefinition", "parameters": { - "id": 593, + "id": 595, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 592, + "id": 594, "name": "index", "nodeType": "VariableDeclaration", - "scope": 677, - "src": "7775:10:0", + "scope": 679, + "src": "7785:10:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23748,10 +23805,10 @@ "typeString": "uint256" }, "typeName": { - "id": 591, + "id": 593, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "7775:4:0", + "src": "7785:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -23761,39 +23818,39 @@ "visibility": "internal" } ], - "src": "7774:12:0" + "src": "7784:12:0" }, "payable": false, "returnParameters": { - "id": 598, + "id": 600, "nodeType": "ParameterList", "parameters": [], - "src": "7818:0:0" + "src": "7828:0:0" }, - "scope": 1076, - "src": "7747:961:0", + "scope": 1080, + "src": "7757:961:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 738, + "id": 742, "nodeType": "Block", - "src": "8792:473:0", + "src": "8802:491:0", "statements": [ { "assignments": [ - 689 + 691 ], "declarations": [ { "constant": false, - "id": 689, + "id": 691, "name": "refundVote", "nodeType": "VariableDeclaration", - "scope": 739, - "src": "8802:15:0", + "scope": 743, + "src": "8812:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -23801,10 +23858,10 @@ "typeString": "bool" }, "typeName": { - "id": 688, + "id": 690, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8802:4:0", + "src": "8812:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23814,41 +23871,41 @@ "visibility": "internal" } ], - "id": 695, + "id": 697, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 690, + "id": 692, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8820:12:0", + "src": "8830:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 693, + "id": 695, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 691, + "id": 693, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "8833:3:0", + "referencedDeclaration": 1247, + "src": "8843:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 692, + "id": 694, "isConstant": false, "isLValue": false, "isPure": false, @@ -23856,7 +23913,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8833:10:0", + "src": "8843:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -23867,13 +23924,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8820:24:0", + "src": "8830:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 694, + "id": 696, "isConstant": false, "isLValue": true, "isPure": false, @@ -23881,14 +23938,14 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8820:35:0", + "src": "8830:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "8802:53:0" + "src": "8812:53:0" }, { "expression": { @@ -23900,19 +23957,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 699, + "id": 701, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 697, + "id": 699, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 679, - "src": "8873:4:0", + "referencedDeclaration": 681, + "src": "8883:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23922,18 +23979,18 @@ "operator": "!=", "rightExpression": { "argumentTypes": null, - "id": 698, + "id": 700, "name": "refundVote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 689, - "src": "8881:10:0", + "referencedDeclaration": 691, + "src": "8891:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8873:18:0", + "src": "8883:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -23942,14 +23999,14 @@ { "argumentTypes": null, "hexValue": "4578697374696e6720766f7465207374617465206973206964656e746963616c20746f20766f74652076616c7565", - "id": 700, + "id": 702, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "8893:48:0", + "src": "8903:48:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_83d9b841f406ef52e32942228e28c13fcdb47e5fa9512f22f335b7955cb71cb5", @@ -23969,21 +24026,21 @@ "typeString": "literal_string \"Existing vote state is identical to vote value\"" } ], - "id": 696, + "id": 698, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "8865:7:0", + "referencedDeclaration": 1251, + "src": "8875:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 701, + "id": 703, "isConstant": false, "isLValue": false, "isPure": false, @@ -23991,20 +24048,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "8865:77:0", + "src": "8875:77:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 702, + "id": 704, "nodeType": "ExpressionStatement", - "src": "8865:77:0" + "src": "8875:77:0" }, { "expression": { "argumentTypes": null, - "id": 709, + "id": 711, "isConstant": false, "isLValue": false, "isPure": false, @@ -24015,34 +24072,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 703, + "id": 705, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "8952:12:0", + "src": "8962:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 706, + "id": 708, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 704, + "id": 706, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "8965:3:0", + "referencedDeclaration": 1247, + "src": "8975:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 705, + "id": 707, "isConstant": false, "isLValue": false, "isPure": false, @@ -24050,7 +24107,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "8965:10:0", + "src": "8975:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24061,13 +24118,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "8952:24:0", + "src": "8962:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 707, + "id": 709, "isConstant": false, "isLValue": true, "isPure": false, @@ -24075,7 +24132,7 @@ "memberName": "refundVote", "nodeType": "MemberAccess", "referencedDeclaration": 27, - "src": "8952:35:0", + "src": "8962:35:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24085,31 +24142,31 @@ "operator": "=", "rightHandSide": { "argumentTypes": null, - "id": 708, + "id": 710, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 679, - "src": "8990:4:0", + "referencedDeclaration": 681, + "src": "9000:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "8952:42:0", + "src": "8962:42:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 710, + "id": 712, "nodeType": "ExpressionStatement", - "src": "8952:42:0" + "src": "8962:42:0" }, { "condition": { "argumentTypes": null, - "id": 712, + "id": 714, "isConstant": false, "isLValue": false, "isPure": false, @@ -24117,15 +24174,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "9008:5:0", + "src": "9018:5:0", "subExpression": { "argumentTypes": null, - "id": 711, + "id": 713, "name": "vote", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 679, - "src": "9009:4:0", + "referencedDeclaration": 681, + "src": "9019:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24137,193 +24194,212 @@ } }, "falseBody": { - "id": 736, - "nodeType": "Block", - "src": "9140:119:0", - "statements": [ - { - "expression": { - "argumentTypes": null, - "id": 734, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { + "condition": { + "argumentTypes": null, + "id": 727, + "name": "vote", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 681, + "src": "9162:4:0", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": null, + "id": 740, + "nodeType": "IfStatement", + "src": "9158:129:0", + "trueBody": { + "id": 739, + "nodeType": "Block", + "src": "9168:119:0", + "statements": [ + { + "expression": { "argumentTypes": null, - "id": 725, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9154:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "argumentTypes": null, - "arguments": [ - { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "baseExpression": { - "argumentTypes": null, - "id": 728, - "name": "contributors", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 68, - "src": "9204:12:0", - "typeDescriptions": { - "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", - "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" - } - }, - "id": 731, - "indexExpression": { - "argumentTypes": null, - "expression": { - "argumentTypes": null, - "id": 729, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "9217:3:0", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 730, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "sender", - "nodeType": "MemberAccess", - "referencedDeclaration": null, - "src": "9217:10:0", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "nodeType": "IndexAccess", - "src": "9204:24:0", - "typeDescriptions": { - "typeIdentifier": "t_struct$_Contributor_$30_storage", - "typeString": "struct CrowdFund.Contributor storage ref" - } - }, - "id": 732, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberName": "contributionAmount", - "nodeType": "MemberAccess", - "referencedDeclaration": 22, - "src": "9204:43:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "expression": { - "argumentTypes": null, - "id": 726, - "name": "amountVotingForRefund", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 62, - "src": "9178:21:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 727, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberName": "add", - "nodeType": "MemberAccess", - "referencedDeclaration": 1227, - "src": "9178:25:0", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", - "typeString": "function (uint256,uint256) pure returns (uint256)" - } - }, - "id": 733, + "id": 737, "isConstant": false, "isLValue": false, "isPure": false, - "kind": "functionCall", "lValueRequested": false, - "names": [], - "nodeType": "FunctionCall", - "src": "9178:70:0", + "leftHandSide": { + "argumentTypes": null, + "id": 728, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9182:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "argumentTypes": null, + "arguments": [ + { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "baseExpression": { + "argumentTypes": null, + "id": 731, + "name": "contributors", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 68, + "src": "9232:12:0", + "typeDescriptions": { + "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", + "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" + } + }, + "id": 734, + "indexExpression": { + "argumentTypes": null, + "expression": { + "argumentTypes": null, + "id": 732, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1247, + "src": "9245:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "referencedDeclaration": null, + "src": "9245:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9232:24:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Contributor_$30_storage", + "typeString": "struct CrowdFund.Contributor storage ref" + } + }, + "id": 735, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "contributionAmount", + "nodeType": "MemberAccess", + "referencedDeclaration": 22, + "src": "9232:43:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "argumentTypes": null, + "id": 729, + "name": "amountVotingForRefund", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 62, + "src": "9206:21:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 1231, + "src": "9206:25:0", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 736, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9206:70:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9182:94:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9154:94:0", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "id": 735, - "nodeType": "ExpressionStatement", - "src": "9154:94:0" - } - ] + "id": 738, + "nodeType": "ExpressionStatement", + "src": "9182:94:0" + } + ] + } }, - "id": 737, + "id": 741, "nodeType": "IfStatement", - "src": "9004:255:0", + "src": "9014:273:0", "trueBody": { - "id": 724, + "id": 726, "nodeType": "Block", - "src": "9015:119:0", + "src": "9025:119:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 722, + "id": 724, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 713, + "id": 715, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9029:21:0", + "src": "9039:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24340,34 +24416,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 716, + "id": 718, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "9079:12:0", + "src": "9089:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 719, + "id": 721, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 717, + "id": 719, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "9092:3:0", + "referencedDeclaration": 1247, + "src": "9102:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 718, + "id": 720, "isConstant": false, "isLValue": false, "isPure": false, @@ -24375,7 +24451,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9092:10:0", + "src": "9102:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -24386,13 +24462,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "9079:24:0", + "src": "9089:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 720, + "id": 722, "isConstant": false, "isLValue": true, "isPure": false, @@ -24400,7 +24476,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "9079:43:0", + "src": "9089:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24416,32 +24492,32 @@ ], "expression": { "argumentTypes": null, - "id": 714, + "id": 716, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9053:21:0", + "src": "9063:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 715, + "id": 717, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "sub", "nodeType": "MemberAccess", - "referencedDeclaration": 1203, - "src": "9053:25:0", + "referencedDeclaration": 1207, + "src": "9063:25:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 721, + "id": 723, "isConstant": false, "isLValue": false, "isPure": false, @@ -24449,21 +24525,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9053:70:0", + "src": "9063:70:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9029:94:0", + "src": "9039:94:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 723, + "id": 725, "nodeType": "ExpressionStatement", - "src": "9029:94:0" + "src": "9039:94:0" } ] } @@ -24471,48 +24547,29 @@ ] }, "documentation": null, - "id": 739, + "id": 743, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ - { - "arguments": null, - "id": 682, - "modifierName": { - "argumentTypes": null, - "id": 681, - "name": "onlyContributor", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 1065, - "src": "8752:15:0", - "typeDescriptions": { - "typeIdentifier": "t_modifier$__$", - "typeString": "modifier ()" - } - }, - "nodeType": "ModifierInvocation", - "src": "8752:15:0" - }, { "arguments": null, "id": 684, "modifierName": { "argumentTypes": null, "id": 683, - "name": "onlyRaised", + "name": "onlyContributor", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1036, - "src": "8768:10:0", + "referencedDeclaration": 1069, + "src": "8762:15:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8768:10:0" + "src": "8762:15:0" }, { "arguments": null, @@ -24520,33 +24577,52 @@ "modifierName": { "argumentTypes": null, "id": 685, - "name": "onlyUnfrozen", + "name": "onlyRaised", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "8779:12:0", + "referencedDeclaration": 1040, + "src": "8778:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "8779:12:0" + "src": "8778:10:0" + }, + { + "arguments": null, + "id": 688, + "modifierName": { + "argumentTypes": null, + "id": 687, + "name": "onlyUnfrozen", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1031, + "src": "8789:12:0", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8789:12:0" } ], "name": "voteRefund", "nodeType": "FunctionDefinition", "parameters": { - "id": 680, + "id": 682, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 679, + "id": 681, "name": "vote", "nodeType": "VariableDeclaration", - "scope": 739, - "src": "8734:9:0", + "scope": 743, + "src": "8744:9:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24554,10 +24630,10 @@ "typeString": "bool" }, "typeName": { - "id": 678, + "id": 680, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "8734:4:0", + "src": "8744:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24567,39 +24643,39 @@ "visibility": "internal" } ], - "src": "8733:11:0" + "src": "8743:11:0" }, "payable": false, "returnParameters": { - "id": 687, + "id": 689, "nodeType": "ParameterList", "parameters": [], - "src": "8792:0:0" + "src": "8802:0:0" }, - "scope": 1076, - "src": "8714:551:0", + "scope": 1080, + "src": "8724:569:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 802, + "id": 806, "nodeType": "Block", - "src": "9309:655:0", + "src": "9337:655:0", "statements": [ { "assignments": [ - 745 + 749 ], "declarations": [ { "constant": false, - "id": 745, + "id": 749, "name": "callerIsTrustee", "nodeType": "VariableDeclaration", - "scope": 803, - "src": "9319:20:0", + "scope": 807, + "src": "9347:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24607,10 +24683,10 @@ "typeString": "bool" }, "typeName": { - "id": 744, + "id": 748, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9319:4:0", + "src": "9347:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24620,24 +24696,24 @@ "visibility": "internal" } ], - "id": 748, + "id": 752, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 746, + "id": 750, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 955, - "src": "9342:15:0", + "referencedDeclaration": 959, + "src": "9370:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 747, + "id": 751, "isConstant": false, "isLValue": false, "isPure": false, @@ -24645,27 +24721,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9342:17:0", + "src": "9370:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9319:40:0" + "src": "9347:40:0" }, { "assignments": [ - 750 + 754 ], "declarations": [ { "constant": false, - "id": 750, + "id": 754, "name": "crowdFundFailed", "nodeType": "VariableDeclaration", - "scope": 803, - "src": "9369:20:0", + "scope": 807, + "src": "9397:20:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24673,10 +24749,10 @@ "typeString": "bool" }, "typeName": { - "id": 749, + "id": 753, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9369:4:0", + "src": "9397:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24686,24 +24762,24 @@ "visibility": "internal" } ], - "id": 753, + "id": 757, "initialValue": { "argumentTypes": null, "arguments": [], "expression": { "argumentTypes": [], - "id": 751, + "id": 755, "name": "isFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 968, - "src": "9392:8:0", + "referencedDeclaration": 972, + "src": "9420:8:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 752, + "id": 756, "isConstant": false, "isLValue": false, "isPure": false, @@ -24711,27 +24787,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9392:10:0", + "src": "9420:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9369:33:0" + "src": "9397:33:0" }, { "assignments": [ - 755 + 759 ], "declarations": [ { "constant": false, - "id": 755, + "id": 759, "name": "majorityVotingToRefund", "nodeType": "VariableDeclaration", - "scope": 803, - "src": "9412:27:0", + "scope": 807, + "src": "9440:27:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -24739,10 +24815,10 @@ "typeString": "bool" }, "typeName": { - "id": 754, + "id": 758, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "9412:4:0", + "src": "9440:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24752,18 +24828,18 @@ "visibility": "internal" } ], - "id": 759, + "id": 763, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 757, + "id": 761, "name": "amountVotingForRefund", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 62, - "src": "9459:21:0", + "src": "9487:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -24777,18 +24853,18 @@ "typeString": "uint256" } ], - "id": 756, + "id": 760, "name": "isMajorityVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 924, - "src": "9442:16:0", + "referencedDeclaration": 928, + "src": "9470:16:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$_t_uint256_$returns$_t_bool_$", "typeString": "function (uint256) view returns (bool)" } }, - "id": 758, + "id": 762, "isConstant": false, "isLValue": false, "isPure": false, @@ -24796,14 +24872,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9442:39:0", + "src": "9470:39:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "9412:69:0" + "src": "9440:69:0" }, { "expression": { @@ -24815,7 +24891,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 765, + "id": 769, "isConstant": false, "isLValue": false, "isPure": false, @@ -24826,19 +24902,19 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 763, + "id": 767, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 761, + "id": 765, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 745, - "src": "9499:15:0", + "referencedDeclaration": 749, + "src": "9527:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24848,18 +24924,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 762, + "id": 766, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 750, - "src": "9518:15:0", + "referencedDeclaration": 754, + "src": "9546:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9499:34:0", + "src": "9527:34:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24869,18 +24945,18 @@ "operator": "||", "rightExpression": { "argumentTypes": null, - "id": 764, + "id": 768, "name": "majorityVotingToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 755, - "src": "9537:22:0", + "referencedDeclaration": 759, + "src": "9565:22:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "src": "9499:60:0", + "src": "9527:60:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24889,14 +24965,14 @@ { "argumentTypes": null, "hexValue": "526571756972656420636f6e646974696f6e7320666f7220726566756e6420617265206e6f74206d6574", - "id": 766, + "id": 770, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "9561:44:0", + "src": "9589:44:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_1086fb0a245a80bddbec2bbf87c88d8fc142025bee989551e1ac5ccca15d31ff", @@ -24916,21 +24992,21 @@ "typeString": "literal_string \"Required conditions for refund are not met\"" } ], - "id": 760, + "id": 764, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "9491:7:0", + "referencedDeclaration": 1251, + "src": "9519:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 767, + "id": 771, "isConstant": false, "isLValue": false, "isPure": false, @@ -24938,25 +25014,25 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9491:115:0", + "src": "9519:115:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 768, + "id": 772, "nodeType": "ExpressionStatement", - "src": "9491:115:0" + "src": "9519:115:0" }, { "condition": { "argumentTypes": null, - "id": 769, + "id": 773, "name": "callerIsTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 745, - "src": "9620:15:0", + "referencedDeclaration": 749, + "src": "9648:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -24965,38 +25041,38 @@ "falseBody": { "condition": { "argumentTypes": null, - "id": 776, + "id": 780, "name": "crowdFundFailed", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 750, - "src": "9717:15:0", + "referencedDeclaration": 754, + "src": "9745:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": { - "id": 788, + "id": 792, "nodeType": "Block", - "src": "9810:78:0", + "src": "9838:78:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 786, + "id": 790, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 783, + "id": 787, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9824:12:0", + "src": "9852:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -25008,18 +25084,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 784, + "id": 788, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9839:12:0", + "src": "9867:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 785, + "id": 789, "isConstant": false, "isLValue": false, "isPure": true, @@ -25027,48 +25103,48 @@ "memberName": "MAJORITY_VOTING_TO_REFUND", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9839:38:0", + "src": "9867:38:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9824:53:0", + "src": "9852:53:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 787, + "id": 791, "nodeType": "ExpressionStatement", - "src": "9824:53:0" + "src": "9852:53:0" } ] }, - "id": 789, + "id": 793, "nodeType": "IfStatement", - "src": "9713:175:0", + "src": "9741:175:0", "trueBody": { - "id": 782, + "id": 786, "nodeType": "Block", - "src": "9734:70:0", + "src": "9762:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 780, + "id": 784, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 777, + "id": 781, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9748:12:0", + "src": "9776:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -25080,18 +25156,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 778, + "id": 782, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9763:12:0", + "src": "9791:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 779, + "id": 783, "isConstant": false, "isLValue": false, "isPure": true, @@ -25099,49 +25175,49 @@ "memberName": "CROWD_FUND_FAILED", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9763:30:0", + "src": "9791:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9748:45:0", + "src": "9776:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 781, + "id": 785, "nodeType": "ExpressionStatement", - "src": "9748:45:0" + "src": "9776:45:0" } ] } }, - "id": 790, + "id": 794, "nodeType": "IfStatement", - "src": "9616:272:0", + "src": "9644:272:0", "trueBody": { - "id": 775, + "id": 779, "nodeType": "Block", - "src": "9637:70:0", + "src": "9665:70:0", "statements": [ { "expression": { "argumentTypes": null, - "id": 773, + "id": 777, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 770, + "id": 774, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "9651:12:0", + "src": "9679:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -25153,18 +25229,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 771, + "id": 775, "name": "FreezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 9, - "src": "9666:12:0", + "src": "9694:12:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_enum$_FreezeReason_$9_$", "typeString": "type(enum CrowdFund.FreezeReason)" } }, - "id": 772, + "id": 776, "isConstant": false, "isLValue": false, "isPure": true, @@ -25172,21 +25248,21 @@ "memberName": "CALLER_IS_TRUSTEE", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9666:30:0", + "src": "9694:30:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "src": "9651:45:0", + "src": "9679:45:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" } }, - "id": 774, + "id": 778, "nodeType": "ExpressionStatement", - "src": "9651:45:0" + "src": "9679:45:0" } ] } @@ -25194,19 +25270,19 @@ { "expression": { "argumentTypes": null, - "id": 793, + "id": 797, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 791, + "id": 795, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "9897:6:0", + "src": "9925:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25217,14 +25293,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 792, + "id": 796, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "9906:4:0", + "src": "9934:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -25232,32 +25308,32 @@ }, "value": "true" }, - "src": "9897:13:0", + "src": "9925:13:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 794, + "id": 798, "nodeType": "ExpressionStatement", - "src": "9897:13:0" + "src": "9925:13:0" }, { "expression": { "argumentTypes": null, - "id": 800, + "id": 804, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftHandSide": { "argumentTypes": null, - "id": 795, + "id": 799, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "9920:13:0", + "src": "9948:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25272,14 +25348,14 @@ "arguments": [ { "argumentTypes": null, - "id": 797, + "id": 801, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1258, - "src": "9944:4:0", + "referencedDeclaration": 1262, + "src": "9972:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } } @@ -25287,24 +25363,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } ], - "id": 796, + "id": 800, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "9936:7:0", + "src": "9964:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 798, + "id": 802, "isConstant": false, "isLValue": false, "isPure": false, @@ -25312,13 +25388,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "9936:13:0", + "src": "9964:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 799, + "id": 803, "isConstant": false, "isLValue": false, "isPure": false, @@ -25326,76 +25402,76 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "9936:21:0", + "src": "9964:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "9920:37:0", + "src": "9948:37:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 801, + "id": 805, "nodeType": "ExpressionStatement", - "src": "9920:37:0" + "src": "9948:37:0" } ] }, "documentation": null, - "id": 803, + "id": 807, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 742, + "id": 746, "modifierName": { "argumentTypes": null, - "id": 741, + "id": 745, "name": "onlyUnfrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1027, - "src": "9296:12:0", + "referencedDeclaration": 1031, + "src": "9324:12:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "9296:12:0" + "src": "9324:12:0" } ], "name": "refund", "nodeType": "FunctionDefinition", "parameters": { - "id": 740, + "id": 744, "nodeType": "ParameterList", "parameters": [], - "src": "9286:2:0" + "src": "9314:2:0" }, "payable": false, "returnParameters": { - "id": 743, + "id": 747, "nodeType": "ParameterList", "parameters": [], - "src": "9309:0:0" + "src": "9337:0:0" }, - "scope": 1076, - "src": "9271:693:0", + "scope": 1080, + "src": "9299:693:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 866, + "id": 870, "nodeType": "Block", - "src": "10099:528:0", + "src": "10127:528:0", "statements": [ { "expression": { @@ -25403,12 +25479,12 @@ "arguments": [ { "argumentTypes": null, - "id": 811, + "id": 815, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "10117:6:0", + "src": "10145:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25417,14 +25493,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 812, + "id": 816, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10125:25:0", + "src": "10153:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -25444,21 +25520,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 810, + "id": 814, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "10109:7:0", + "referencedDeclaration": 1251, + "src": "10137:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 813, + "id": 817, "isConstant": false, "isLValue": false, "isPure": false, @@ -25466,28 +25542,28 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10109:42:0", + "src": "10137:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 814, + "id": 818, "nodeType": "ExpressionStatement", - "src": "10109:42:0" + "src": "10137:42:0" }, { "assignments": [ - 816 + 820 ], "declarations": [ { "constant": false, - "id": 816, + "id": 820, "name": "isRefunded", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10161:15:0", + "scope": 871, + "src": "10189:15:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -25495,10 +25571,10 @@ "typeString": "bool" }, "typeName": { - "id": 815, + "id": 819, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "10161:4:0", + "src": "10189:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25508,33 +25584,33 @@ "visibility": "internal" } ], - "id": 821, + "id": 825, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 817, + "id": 821, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10179:12:0", + "src": "10207:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 819, + "id": 823, "indexExpression": { "argumentTypes": null, - "id": 818, + "id": 822, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10192:13:0", + "referencedDeclaration": 809, + "src": "10220:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -25545,13 +25621,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10179:27:0", + "src": "10207:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 820, + "id": 824, "isConstant": false, "isLValue": true, "isPure": false, @@ -25559,14 +25635,14 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10179:36:0", + "src": "10207:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "nodeType": "VariableDeclarationStatement", - "src": "10161:54:0" + "src": "10189:54:0" }, { "expression": { @@ -25574,7 +25650,7 @@ "arguments": [ { "argumentTypes": null, - "id": 824, + "id": 828, "isConstant": false, "isLValue": false, "isPure": false, @@ -25582,15 +25658,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10233:11:0", + "src": "10261:11:0", "subExpression": { "argumentTypes": null, - "id": 823, + "id": 827, "name": "isRefunded", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 816, - "src": "10234:10:0", + "referencedDeclaration": 820, + "src": "10262:10:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25604,14 +25680,14 @@ { "argumentTypes": null, "hexValue": "537065636966696564206164647265737320697320616c726561647920726566756e646564", - "id": 825, + "id": 829, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10246:39:0", + "src": "10274:39:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_ad918abf6ea38b3d8dd6fccfc0198c349db0339300085e3846f4b85c44350efa", @@ -25631,21 +25707,21 @@ "typeString": "literal_string \"Specified address is already refunded\"" } ], - "id": 822, + "id": 826, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "10225:7:0", + "referencedDeclaration": 1251, + "src": "10253:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 826, + "id": 830, "isConstant": false, "isLValue": false, "isPure": false, @@ -25653,20 +25729,20 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10225:61:0", + "src": "10253:61:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 827, + "id": 831, "nodeType": "ExpressionStatement", - "src": "10225:61:0" + "src": "10253:61:0" }, { "expression": { "argumentTypes": null, - "id": 833, + "id": 837, "isConstant": false, "isLValue": false, "isPure": false, @@ -25677,26 +25753,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 828, + "id": 832, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10296:12:0", + "src": "10324:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 830, + "id": 834, "indexExpression": { "argumentTypes": null, - "id": 829, + "id": 833, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10309:13:0", + "referencedDeclaration": 809, + "src": "10337:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -25707,13 +25783,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10296:27:0", + "src": "10324:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 831, + "id": 835, "isConstant": false, "isLValue": true, "isPure": false, @@ -25721,7 +25797,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10296:36:0", + "src": "10324:36:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -25732,14 +25808,14 @@ "rightHandSide": { "argumentTypes": null, "hexValue": "74727565", - "id": 832, + "id": 836, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "10335:4:0", + "src": "10363:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -25747,28 +25823,28 @@ }, "value": "true" }, - "src": "10296:43:0", + "src": "10324:43:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 834, + "id": 838, "nodeType": "ExpressionStatement", - "src": "10296:43:0" + "src": "10324:43:0" }, { "assignments": [ - 836 + 840 ], "declarations": [ { "constant": false, - "id": 836, + "id": 840, "name": "contributionAmount", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10349:23:0", + "scope": 871, + "src": "10377:23:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -25776,10 +25852,10 @@ "typeString": "uint256" }, "typeName": { - "id": 835, + "id": 839, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10349:4:0", + "src": "10377:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25789,33 +25865,33 @@ "visibility": "internal" } ], - "id": 841, + "id": 845, "initialValue": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 837, + "id": 841, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10375:12:0", + "src": "10403:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 839, + "id": 843, "indexExpression": { "argumentTypes": null, - "id": 838, + "id": 842, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10388:13:0", + "referencedDeclaration": 809, + "src": "10416:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -25826,13 +25902,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10375:27:0", + "src": "10403:27:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 840, + "id": 844, "isConstant": false, "isLValue": true, "isPure": false, @@ -25840,27 +25916,27 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "10375:46:0", + "src": "10403:46:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10349:72:0" + "src": "10377:72:0" }, { "assignments": [ - 843 + 847 ], "declarations": [ { "constant": false, - "id": 843, + "id": 847, "name": "amountToRefund", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10431:19:0", + "scope": 871, + "src": "10459:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -25868,10 +25944,10 @@ "typeString": "uint256" }, "typeName": { - "id": 842, + "id": 846, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10431:4:0", + "src": "10459:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25881,18 +25957,18 @@ "visibility": "internal" } ], - "id": 854, + "id": 858, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 852, + "id": 856, "name": "frozenBalance", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 58, - "src": "10503:13:0", + "src": "10531:13:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25916,14 +25992,14 @@ "arguments": [ { "argumentTypes": null, - "id": 847, + "id": 851, "name": "this", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1258, - "src": "10484:4:0", + "referencedDeclaration": 1262, + "src": "10512:4:0", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } } @@ -25931,24 +26007,24 @@ "expression": { "argumentTypes": [ { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } ], - "id": 846, + "id": 850, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "10476:7:0", + "src": "10504:7:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_address_$", "typeString": "type(address)" }, "typeName": "address" }, - "id": 848, + "id": 852, "isConstant": false, "isLValue": false, "isPure": false, @@ -25956,13 +26032,13 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10476:13:0", + "src": "10504:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 849, + "id": 853, "isConstant": false, "isLValue": false, "isPure": false, @@ -25970,7 +26046,7 @@ "memberName": "balance", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10476:21:0", + "src": "10504:21:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -25986,32 +26062,32 @@ ], "expression": { "argumentTypes": null, - "id": 844, + "id": 848, "name": "contributionAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 836, - "src": "10453:18:0", + "referencedDeclaration": 840, + "src": "10481:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 845, + "id": 849, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1169, - "src": "10453:22:0", + "referencedDeclaration": 1173, + "src": "10481:22:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 850, + "id": 854, "isConstant": false, "isLValue": false, "isPure": false, @@ -26019,27 +26095,27 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:45:0", + "src": "10481:45:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 851, + "id": 855, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "div", "nodeType": "MemberAccess", - "referencedDeclaration": 1183, - "src": "10453:49:0", + "referencedDeclaration": 1187, + "src": "10481:49:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 853, + "id": 857, "isConstant": false, "isLValue": false, "isPure": false, @@ -26047,14 +26123,14 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10453:64:0", + "src": "10481:64:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, "nodeType": "VariableDeclarationStatement", - "src": "10431:86:0" + "src": "10459:86:0" }, { "expression": { @@ -26062,12 +26138,12 @@ "arguments": [ { "argumentTypes": null, - "id": 858, + "id": 862, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 843, - "src": "10550:14:0", + "referencedDeclaration": 847, + "src": "10578:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26083,18 +26159,18 @@ ], "expression": { "argumentTypes": null, - "id": 855, + "id": 859, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10527:13:0", + "referencedDeclaration": 809, + "src": "10555:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "id": 857, + "id": 861, "isConstant": false, "isLValue": false, "isPure": false, @@ -26102,13 +26178,13 @@ "memberName": "transfer", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10527:22:0", + "src": "10555:22:0", "typeDescriptions": { "typeIdentifier": "t_function_transfer_nonpayable$_t_uint256_$returns$__$", "typeString": "function (uint256)" } }, - "id": 859, + "id": 863, "isConstant": false, "isLValue": false, "isPure": false, @@ -26116,15 +26192,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10527:38:0", + "src": "10555:38:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 860, + "id": 864, "nodeType": "ExpressionStatement", - "src": "10527:38:0" + "src": "10555:38:0" }, { "eventCall": { @@ -26132,12 +26208,12 @@ "arguments": [ { "argumentTypes": null, - "id": 862, + "id": 866, "name": "refundAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 805, - "src": "10590:13:0", + "referencedDeclaration": 809, + "src": "10618:13:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26145,12 +26221,12 @@ }, { "argumentTypes": null, - "id": 863, + "id": 867, "name": "amountToRefund", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 843, - "src": "10605:14:0", + "referencedDeclaration": 847, + "src": "10633:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26168,18 +26244,18 @@ "typeString": "uint256" } ], - "id": 861, + "id": 865, "name": "Withdrawn", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 42, - "src": "10580:9:0", + "src": "10608:9:0", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$", "typeString": "function (address,uint256)" } }, - "id": 864, + "id": 868, "isConstant": false, "isLValue": false, "isPure": false, @@ -26187,57 +26263,57 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10580:40:0", + "src": "10608:40:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 865, + "id": 869, "nodeType": "EmitStatement", - "src": "10575:45:0" + "src": "10603:45:0" } ] }, "documentation": null, - "id": 867, + "id": 871, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 808, + "id": 812, "modifierName": { "argumentTypes": null, - "id": 807, + "id": 811, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1017, - "src": "10088:10:0", + "referencedDeclaration": 1021, + "src": "10116:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10088:10:0" + "src": "10116:10:0" } ], "name": "withdraw", "nodeType": "FunctionDefinition", "parameters": { - "id": 806, + "id": 810, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 805, + "id": 809, "name": "refundAddress", "nodeType": "VariableDeclaration", - "scope": 867, - "src": "10058:21:0", + "scope": 871, + "src": "10086:21:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26245,10 +26321,10 @@ "typeString": "address" }, "typeName": { - "id": 804, + "id": 808, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10058:7:0", + "src": "10086:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26258,45 +26334,45 @@ "visibility": "internal" } ], - "src": "10057:23:0" + "src": "10085:23:0" }, "payable": false, "returnParameters": { - "id": 809, + "id": 813, "nodeType": "ParameterList", "parameters": [], - "src": "10099:0:0" + "src": "10127:0:0" }, - "scope": 1076, - "src": "10040:587:0", + "scope": 1080, + "src": "10068:587:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 908, + "id": 912, "nodeType": "Block", - "src": "10773:322:0", + "src": "10801:322:0", "statements": [ { "body": { - "id": 902, + "id": 906, "nodeType": "Block", - "src": "10833:221:0", + "src": "10861:221:0", "statements": [ { "assignments": [ - 886 + 890 ], "declarations": [ { "constant": false, - "id": 886, + "id": 890, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 909, - "src": "10847:26:0", + "scope": 913, + "src": "10875:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26304,10 +26380,10 @@ "typeString": "address" }, "typeName": { - "id": 885, + "id": 889, "name": "address", "nodeType": "ElementaryTypeName", - "src": "10847:7:0", + "src": "10875:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26317,31 +26393,31 @@ "visibility": "internal" } ], - "id": 890, + "id": 894, "initialValue": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 887, + "id": 891, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10876:15:0", + "src": "10904:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 889, + "id": 893, "indexExpression": { "argumentTypes": null, - "id": 888, + "id": 892, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 875, - "src": "10892:1:0", + "referencedDeclaration": 879, + "src": "10920:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26352,19 +26428,19 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10876:18:0", + "src": "10904:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, "nodeType": "VariableDeclarationStatement", - "src": "10847:47:0" + "src": "10875:47:0" }, { "condition": { "argumentTypes": null, - "id": 895, + "id": 899, "isConstant": false, "isLValue": false, "isPure": false, @@ -26372,33 +26448,33 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "10912:42:0", + "src": "10940:42:0", "subExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 891, + "id": 895, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "10913:12:0", + "src": "10941:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 893, + "id": 897, "indexExpression": { "argumentTypes": null, - "id": 892, + "id": 896, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 886, - "src": "10926:18:0", + "referencedDeclaration": 890, + "src": "10954:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26409,13 +26485,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "10913:32:0", + "src": "10941:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 894, + "id": 898, "isConstant": false, "isLValue": true, "isPure": false, @@ -26423,7 +26499,7 @@ "memberName": "refunded", "nodeType": "MemberAccess", "referencedDeclaration": 29, - "src": "10913:41:0", + "src": "10941:41:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -26435,13 +26511,13 @@ } }, "falseBody": null, - "id": 901, + "id": 905, "nodeType": "IfStatement", - "src": "10908:136:0", + "src": "10936:136:0", "trueBody": { - "id": 900, + "id": 904, "nodeType": "Block", - "src": "10956:88:0", + "src": "10984:88:0", "statements": [ { "expression": { @@ -26450,14 +26526,14 @@ { "argumentTypes": null, "hexValue": "4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f742079657420726566756e646564", - "id": 897, + "id": 901, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "10981:47:0", + "src": "11009:47:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_85d231c62370fa6b43ee7ffe2e2243eb8d4631e742e97de3a2558a277a825be1", @@ -26473,21 +26549,21 @@ "typeString": "literal_string \"At least one contributor has not yet refunded\"" } ], - "id": 896, + "id": 900, "name": "revert", "nodeType": "Identifier", "overloadedDeclarations": [ - 1248, - 1249 + 1252, + 1253 ], - "referencedDeclaration": 1249, - "src": "10974:6:0", + "referencedDeclaration": 1253, + "src": "11002:6:0", "typeDescriptions": { "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", "typeString": "function (string memory) pure" } }, - "id": 898, + "id": 902, "isConstant": false, "isLValue": false, "isPure": false, @@ -26495,15 +26571,15 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "10974:55:0", + "src": "11002:55:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 899, + "id": 903, "nodeType": "ExpressionStatement", - "src": "10974:55:0" + "src": "11002:55:0" } ] } @@ -26516,19 +26592,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 881, + "id": 885, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 878, + "id": 882, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 875, - "src": "10800:1:0", + "referencedDeclaration": 879, + "src": "10828:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26540,18 +26616,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 879, + "id": 883, "name": "contributorList", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 71, - "src": "10804:15:0", + "src": "10832:15:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 880, + "id": 884, "isConstant": false, "isLValue": true, "isPure": false, @@ -26559,31 +26635,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "10804:22:0", + "src": "10832:22:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "10800:26:0", + "src": "10828:26:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 903, + "id": 907, "initializationExpression": { "assignments": [ - 875 + 879 ], "declarations": [ { "constant": false, - "id": 875, + "id": 879, "name": "i", "nodeType": "VariableDeclaration", - "scope": 909, - "src": "10788:6:0", + "scope": 913, + "src": "10816:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26591,10 +26667,10 @@ "typeString": "uint256" }, "typeName": { - "id": 874, + "id": 878, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "10788:4:0", + "src": "10816:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26604,18 +26680,18 @@ "visibility": "internal" } ], - "id": 877, + "id": 881, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 876, + "id": 880, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "10797:1:0", + "src": "10825:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -26624,12 +26700,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "10788:10:0" + "src": "10816:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 883, + "id": 887, "isConstant": false, "isLValue": false, "isPure": false, @@ -26637,15 +26713,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "10828:3:0", + "src": "10856:3:0", "subExpression": { "argumentTypes": null, - "id": 882, + "id": 886, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 875, - "src": "10828:1:0", + "referencedDeclaration": 879, + "src": "10856:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26656,12 +26732,12 @@ "typeString": "uint256" } }, - "id": 884, + "id": 888, "nodeType": "ExpressionStatement", - "src": "10828:3:0" + "src": "10856:3:0" }, "nodeType": "ForStatement", - "src": "10783:271:0" + "src": "10811:271:0" }, { "expression": { @@ -26669,12 +26745,12 @@ "arguments": [ { "argumentTypes": null, - "id": 905, + "id": 909, "name": "beneficiary", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 64, - "src": "11076:11:0", + "src": "11104:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -26688,18 +26764,18 @@ "typeString": "address" } ], - "id": 904, + "id": 908, "name": "selfdestruct", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1251, - "src": "11063:12:0", + "referencedDeclaration": 1255, + "src": "11091:12:0", "typeDescriptions": { "typeIdentifier": "t_function_selfdestruct_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 906, + "id": 910, "isConstant": false, "isLValue": false, "isPure": false, @@ -26707,89 +26783,89 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11063:25:0", + "src": "11091:25:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 907, + "id": 911, "nodeType": "ExpressionStatement", - "src": "11063:25:0" + "src": "11091:25:0" } ] }, "documentation": null, - "id": 909, + "id": 913, "implemented": true, "isConstructor": false, "isDeclaredConst": false, "modifiers": [ { "arguments": null, - "id": 870, + "id": 874, "modifierName": { "argumentTypes": null, - "id": 869, + "id": 873, "name": "onlyTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1075, - "src": "10750:11:0", + "referencedDeclaration": 1079, + "src": "10778:11:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10750:11:0" + "src": "10778:11:0" }, { "arguments": null, - "id": 872, + "id": 876, "modifierName": { "argumentTypes": null, - "id": 871, + "id": 875, "name": "onlyFrozen", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1017, - "src": "10762:10:0", + "referencedDeclaration": 1021, + "src": "10790:10:0", "typeDescriptions": { "typeIdentifier": "t_modifier$__$", "typeString": "modifier ()" } }, "nodeType": "ModifierInvocation", - "src": "10762:10:0" + "src": "10790:10:0" } ], "name": "destroy", "nodeType": "FunctionDefinition", "parameters": { - "id": 868, + "id": 872, "nodeType": "ParameterList", "parameters": [], - "src": "10740:2:0" + "src": "10768:2:0" }, "payable": false, "returnParameters": { - "id": 873, + "id": 877, "nodeType": "ParameterList", "parameters": [], - "src": "10773:0:0" + "src": "10801:0:0" }, - "scope": 1076, - "src": "10724:371:0", + "scope": 1080, + "src": "10752:371:0", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" }, { "body": { - "id": 923, + "id": 927, "nodeType": "Block", - "src": "11172:57:0", + "src": "11200:57:0", "statements": [ { "expression": { @@ -26798,7 +26874,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 921, + "id": 925, "isConstant": false, "isLValue": false, "isPure": false, @@ -26809,14 +26885,14 @@ { "argumentTypes": null, "hexValue": "32", - "id": 918, + "id": 922, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11205:1:0", + "src": "11233:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_2_by_1", @@ -26834,32 +26910,32 @@ ], "expression": { "argumentTypes": null, - "id": 916, + "id": 920, "name": "valueVoting", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 911, - "src": "11189:11:0", + "referencedDeclaration": 915, + "src": "11217:11:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "id": 917, + "id": 921, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "memberName": "mul", "nodeType": "MemberAccess", - "referencedDeclaration": 1169, - "src": "11189:15:0", + "referencedDeclaration": 1173, + "src": "11217:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", "typeString": "function (uint256,uint256) pure returns (uint256)" } }, - "id": 919, + "id": 923, "isConstant": false, "isLValue": false, "isPure": false, @@ -26867,7 +26943,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "11189:18:0", + "src": "11217:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26877,32 +26953,32 @@ "operator": ">", "rightExpression": { "argumentTypes": null, - "id": 920, + "id": 924, "name": "amountRaised", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 56, - "src": "11210:12:0", + "src": "11238:12:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11189:33:0", + "src": "11217:33:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 915, - "id": 922, + "functionReturnParameters": 919, + "id": 926, "nodeType": "Return", - "src": "11182:40:0" + "src": "11210:40:0" } ] }, "documentation": null, - "id": 924, + "id": 928, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -26910,16 +26986,16 @@ "name": "isMajorityVoting", "nodeType": "FunctionDefinition", "parameters": { - "id": 912, + "id": 916, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 911, + "id": 915, "name": "valueVoting", "nodeType": "VariableDeclaration", - "scope": 924, - "src": "11127:16:0", + "scope": 928, + "src": "11155:16:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26927,10 +27003,10 @@ "typeString": "uint256" }, "typeName": { - "id": 910, + "id": 914, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11127:4:0", + "src": "11155:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -26940,20 +27016,20 @@ "visibility": "internal" } ], - "src": "11126:18:0" + "src": "11154:18:0" }, "payable": false, "returnParameters": { - "id": 915, + "id": 919, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 914, + "id": 918, "name": "", "nodeType": "VariableDeclaration", - "scope": 924, - "src": "11166:4:0", + "scope": 928, + "src": "11194:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -26961,10 +27037,10 @@ "typeString": "bool" }, "typeName": { - "id": 913, + "id": 917, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11166:4:0", + "src": "11194:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -26974,25 +27050,25 @@ "visibility": "internal" } ], - "src": "11165:6:0" + "src": "11193:6:0" }, - "scope": 1076, - "src": "11101:128:0", + "scope": 1080, + "src": "11129:128:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 954, + "id": 958, "nodeType": "Block", - "src": "11289:180:0", + "src": "11317:180:0", "statements": [ { "body": { - "id": 950, + "id": 954, "nodeType": "Block", - "src": "11342:99:0", + "src": "11370:99:0", "statements": [ { "condition": { @@ -27001,7 +27077,7 @@ "typeIdentifier": "t_address", "typeString": "address" }, - "id": 945, + "id": 949, "isConstant": false, "isLValue": false, "isPure": false, @@ -27010,18 +27086,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 940, + "id": 944, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "11360:3:0", + "referencedDeclaration": 1247, + "src": "11388:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 941, + "id": 945, "isConstant": false, "isLValue": false, "isPure": false, @@ -27029,7 +27105,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11360:10:0", + "src": "11388:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27041,26 +27117,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 942, + "id": 946, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11374:8:0", + "src": "11402:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 944, + "id": 948, "indexExpression": { "argumentTypes": null, - "id": 943, + "id": 947, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "11383:1:0", + "referencedDeclaration": 934, + "src": "11411:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27071,39 +27147,39 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11374:11:0", + "src": "11402:11:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "src": "11360:25:0", + "src": "11388:25:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseBody": null, - "id": 949, + "id": 953, "nodeType": "IfStatement", - "src": "11356:75:0", + "src": "11384:75:0", "trueBody": { - "id": 948, + "id": 952, "nodeType": "Block", - "src": "11387:44:0", + "src": "11415:44:0", "statements": [ { "expression": { "argumentTypes": null, "hexValue": "74727565", - "id": 946, + "id": 950, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11412:4:0", + "src": "11440:4:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -27111,10 +27187,10 @@ }, "value": "true" }, - "functionReturnParameters": 928, - "id": 947, + "functionReturnParameters": 932, + "id": 951, "nodeType": "Return", - "src": "11405:11:0" + "src": "11433:11:0" } ] } @@ -27127,19 +27203,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 936, + "id": 940, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 933, + "id": 937, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "11316:1:0", + "referencedDeclaration": 934, + "src": "11344:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27151,18 +27227,18 @@ "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 934, + "id": 938, "name": "trustees", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 74, - "src": "11320:8:0", + "src": "11348:8:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 935, + "id": 939, "isConstant": false, "isLValue": true, "isPure": false, @@ -27170,31 +27246,31 @@ "memberName": "length", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "11320:15:0", + "src": "11348:15:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11316:19:0", + "src": "11344:19:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "id": 951, + "id": 955, "initializationExpression": { "assignments": [ - 930 + 934 ], "declarations": [ { "constant": false, - "id": 930, + "id": 934, "name": "i", "nodeType": "VariableDeclaration", - "scope": 955, - "src": "11304:6:0", + "scope": 959, + "src": "11332:6:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27202,10 +27278,10 @@ "typeString": "uint256" }, "typeName": { - "id": 929, + "id": 933, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11304:4:0", + "src": "11332:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27215,18 +27291,18 @@ "visibility": "internal" } ], - "id": 932, + "id": 936, "initialValue": { "argumentTypes": null, "hexValue": "30", - "id": 931, + "id": 935, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "11313:1:0", + "src": "11341:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -27235,12 +27311,12 @@ "value": "0" }, "nodeType": "VariableDeclarationStatement", - "src": "11304:10:0" + "src": "11332:10:0" }, "loopExpression": { "expression": { "argumentTypes": null, - "id": 938, + "id": 942, "isConstant": false, "isLValue": false, "isPure": false, @@ -27248,15 +27324,15 @@ "nodeType": "UnaryOperation", "operator": "++", "prefix": false, - "src": "11337:3:0", + "src": "11365:3:0", "subExpression": { "argumentTypes": null, - "id": 937, + "id": 941, "name": "i", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 930, - "src": "11337:1:0", + "referencedDeclaration": 934, + "src": "11365:1:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27267,25 +27343,25 @@ "typeString": "uint256" } }, - "id": 939, + "id": 943, "nodeType": "ExpressionStatement", - "src": "11337:3:0" + "src": "11365:3:0" }, "nodeType": "ForStatement", - "src": "11299:142:0" + "src": "11327:142:0" }, { "expression": { "argumentTypes": null, "hexValue": "66616c7365", - "id": 952, + "id": 956, "isConstant": false, "isLValue": false, "isPure": true, "kind": "bool", "lValueRequested": false, "nodeType": "Literal", - "src": "11457:5:0", + "src": "11485:5:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_bool", @@ -27293,15 +27369,15 @@ }, "value": "false" }, - "functionReturnParameters": 928, - "id": 953, + "functionReturnParameters": 932, + "id": 957, "nodeType": "Return", - "src": "11450:12:0" + "src": "11478:12:0" } ] }, "documentation": null, - "id": 955, + "id": 959, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27309,23 +27385,23 @@ "name": "isCallerTrustee", "nodeType": "FunctionDefinition", "parameters": { - "id": 925, + "id": 929, "nodeType": "ParameterList", "parameters": [], - "src": "11259:2:0" + "src": "11287:2:0" }, "payable": false, "returnParameters": { - "id": 928, + "id": 932, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 927, + "id": 931, "name": "", "nodeType": "VariableDeclaration", - "scope": 955, - "src": "11283:4:0", + "scope": 959, + "src": "11311:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27333,10 +27409,10 @@ "typeString": "bool" }, "typeName": { - "id": 926, + "id": 930, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11283:4:0", + "src": "11311:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27346,19 +27422,19 @@ "visibility": "internal" } ], - "src": "11282:6:0" + "src": "11310:6:0" }, - "scope": 1076, - "src": "11235:234:0", + "scope": 1080, + "src": "11263:234:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 967, + "id": 971, "nodeType": "Block", - "src": "11522:62:0", + "src": "11550:62:0", "statements": [ { "expression": { @@ -27367,7 +27443,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 965, + "id": 969, "isConstant": false, "isLValue": false, "isPure": false, @@ -27378,19 +27454,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 962, + "id": 966, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 960, + "id": 964, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, - "src": "11539:3:0", + "referencedDeclaration": 1249, + "src": "11567:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27400,18 +27476,18 @@ "operator": ">=", "rightExpression": { "argumentTypes": null, - "id": 961, + "id": 965, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "11546:8:0", + "src": "11574:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "11539:15:0", + "src": "11567:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27421,7 +27497,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 964, + "id": 968, "isConstant": false, "isLValue": false, "isPure": false, @@ -27429,15 +27505,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "11558:19:0", + "src": "11586:19:0", "subExpression": { "argumentTypes": null, - "id": 963, + "id": 967, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "11559:18:0", + "src": "11587:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27448,21 +27524,21 @@ "typeString": "bool" } }, - "src": "11539:38:0", + "src": "11567:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 959, - "id": 966, + "functionReturnParameters": 963, + "id": 970, "nodeType": "Return", - "src": "11532:45:0" + "src": "11560:45:0" } ] }, "documentation": null, - "id": 968, + "id": 972, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27470,23 +27546,23 @@ "name": "isFailed", "nodeType": "FunctionDefinition", "parameters": { - "id": 956, + "id": 960, "nodeType": "ParameterList", "parameters": [], - "src": "11492:2:0" + "src": "11520:2:0" }, "payable": false, "returnParameters": { - "id": 959, + "id": 963, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 958, + "id": 962, "name": "", "nodeType": "VariableDeclaration", - "scope": 968, - "src": "11516:4:0", + "scope": 972, + "src": "11544:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27494,10 +27570,10 @@ "typeString": "bool" }, "typeName": { - "id": 957, + "id": 961, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11516:4:0", + "src": "11544:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27507,19 +27583,19 @@ "visibility": "internal" } ], - "src": "11515:6:0" + "src": "11543:6:0" }, - "scope": 1076, - "src": "11475:109:0", + "scope": 1080, + "src": "11503:109:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 984, + "id": 988, "nodeType": "Block", - "src": "11703:90:0", + "src": "11731:90:0", "statements": [ { "expression": { @@ -27530,26 +27606,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 977, + "id": 981, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11721:12:0", + "src": "11749:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 979, + "id": 983, "indexExpression": { "argumentTypes": null, - "id": 978, + "id": 982, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 970, - "src": "11734:18:0", + "referencedDeclaration": 974, + "src": "11762:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27560,13 +27636,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11721:32:0", + "src": "11749:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 980, + "id": 984, "isConstant": false, "isLValue": true, "isPure": false, @@ -27574,21 +27650,21 @@ "memberName": "milestoneNoVotes", "nodeType": "MemberAccess", "referencedDeclaration": 25, - "src": "11721:49:0", + "src": "11749:49:0", "typeDescriptions": { "typeIdentifier": "t_array$_t_bool_$dyn_storage", "typeString": "bool[] storage ref" } }, - "id": 982, + "id": 986, "indexExpression": { "argumentTypes": null, - "id": 981, + "id": 985, "name": "milestoneIndex", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 972, - "src": "11771:14:0", + "referencedDeclaration": 976, + "src": "11799:14:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27599,21 +27675,21 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11721:65:0", + "src": "11749:65:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, - "functionReturnParameters": 976, - "id": 983, + "functionReturnParameters": 980, + "id": 987, "nodeType": "Return", - "src": "11714:72:0" + "src": "11742:72:0" } ] }, "documentation": null, - "id": 985, + "id": 989, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27621,16 +27697,16 @@ "name": "getContributorMilestoneVote", "nodeType": "FunctionDefinition", "parameters": { - "id": 973, + "id": 977, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 970, + "id": 974, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 985, - "src": "11627:26:0", + "scope": 989, + "src": "11655:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27638,10 +27714,10 @@ "typeString": "address" }, "typeName": { - "id": 969, + "id": 973, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11627:7:0", + "src": "11655:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27652,11 +27728,11 @@ }, { "constant": false, - "id": 972, + "id": 976, "name": "milestoneIndex", "nodeType": "VariableDeclaration", - "scope": 985, - "src": "11655:19:0", + "scope": 989, + "src": "11683:19:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27664,10 +27740,10 @@ "typeString": "uint256" }, "typeName": { - "id": 971, + "id": 975, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11655:4:0", + "src": "11683:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27677,20 +27753,20 @@ "visibility": "internal" } ], - "src": "11626:49:0" + "src": "11654:49:0" }, "payable": false, "returnParameters": { - "id": 976, + "id": 980, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 975, + "id": 979, "name": "", "nodeType": "VariableDeclaration", - "scope": 985, - "src": "11697:4:0", + "scope": 989, + "src": "11725:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27698,10 +27774,10 @@ "typeString": "bool" }, "typeName": { - "id": 974, + "id": 978, "name": "bool", "nodeType": "ElementaryTypeName", - "src": "11697:4:0", + "src": "11725:4:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -27711,19 +27787,19 @@ "visibility": "internal" } ], - "src": "11696:6:0" + "src": "11724:6:0" }, - "scope": 1076, - "src": "11590:203:0", + "scope": 1080, + "src": "11618:203:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 997, + "id": 1001, "nodeType": "Block", - "src": "11896:75:0", + "src": "11924:75:0", "statements": [ { "expression": { @@ -27732,26 +27808,26 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 992, + "id": 996, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "11913:12:0", + "src": "11941:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 994, + "id": 998, "indexExpression": { "argumentTypes": null, - "id": 993, + "id": 997, "name": "contributorAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 987, - "src": "11926:18:0", + "referencedDeclaration": 991, + "src": "11954:18:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27762,13 +27838,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "11913:32:0", + "src": "11941:32:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 995, + "id": 999, "isConstant": false, "isLValue": true, "isPure": false, @@ -27776,21 +27852,21 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "11913:51:0", + "src": "11941:51:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 991, - "id": 996, + "functionReturnParameters": 995, + "id": 1000, "nodeType": "Return", - "src": "11906:58:0" + "src": "11934:58:0" } ] }, "documentation": null, - "id": 998, + "id": 1002, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27798,16 +27874,16 @@ "name": "getContributorContributionAmount", "nodeType": "FunctionDefinition", "parameters": { - "id": 988, + "id": 992, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 987, + "id": 991, "name": "contributorAddress", "nodeType": "VariableDeclaration", - "scope": 998, - "src": "11841:26:0", + "scope": 1002, + "src": "11869:26:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27815,10 +27891,10 @@ "typeString": "address" }, "typeName": { - "id": 986, + "id": 990, "name": "address", "nodeType": "ElementaryTypeName", - "src": "11841:7:0", + "src": "11869:7:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -27828,20 +27904,20 @@ "visibility": "internal" } ], - "src": "11840:28:0" + "src": "11868:28:0" }, "payable": false, "returnParameters": { - "id": 991, + "id": 995, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 990, + "id": 994, "name": "", "nodeType": "VariableDeclaration", - "scope": 998, - "src": "11890:4:0", + "scope": 1002, + "src": "11918:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27849,10 +27925,10 @@ "typeString": "uint256" }, "typeName": { - "id": 989, + "id": 993, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "11890:4:0", + "src": "11918:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27862,19 +27938,19 @@ "visibility": "internal" } ], - "src": "11889:6:0" + "src": "11917:6:0" }, - "scope": 1076, - "src": "11799:172:0", + "scope": 1080, + "src": "11827:172:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1007, + "id": 1011, "nodeType": "Block", - "src": "12031:42:0", + "src": "12059:42:0", "statements": [ { "expression": { @@ -27882,12 +27958,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1004, + "id": 1008, "name": "freezeReason", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 11, - "src": "12053:12:0", + "src": "12081:12:0", "typeDescriptions": { "typeIdentifier": "t_enum$_FreezeReason_$9", "typeString": "enum CrowdFund.FreezeReason" @@ -27901,20 +27977,20 @@ "typeString": "enum CrowdFund.FreezeReason" } ], - "id": 1003, + "id": 1007, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", - "src": "12048:4:0", + "src": "12076:4:0", "typeDescriptions": { "typeIdentifier": "t_type$_t_uint256_$", "typeString": "type(uint256)" }, "typeName": "uint" }, - "id": 1005, + "id": 1009, "isConstant": false, "isLValue": false, "isPure": false, @@ -27922,21 +27998,21 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12048:18:0", + "src": "12076:18:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "functionReturnParameters": 1002, - "id": 1006, + "functionReturnParameters": 1006, + "id": 1010, "nodeType": "Return", - "src": "12041:25:0" + "src": "12069:25:0" } ] }, "documentation": null, - "id": 1008, + "id": 1012, "implemented": true, "isConstructor": false, "isDeclaredConst": true, @@ -27944,23 +28020,23 @@ "name": "getFreezeReason", "nodeType": "FunctionDefinition", "parameters": { - "id": 999, + "id": 1003, "nodeType": "ParameterList", "parameters": [], - "src": "12001:2:0" + "src": "12029:2:0" }, "payable": false, "returnParameters": { - "id": 1002, + "id": 1006, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1001, + "id": 1005, "name": "", "nodeType": "VariableDeclaration", - "scope": 1008, - "src": "12025:4:0", + "scope": 1012, + "src": "12053:4:0", "stateVariable": false, "storageLocation": "default", "typeDescriptions": { @@ -27968,10 +28044,10 @@ "typeString": "uint256" }, "typeName": { - "id": 1000, + "id": 1004, "name": "uint", "nodeType": "ElementaryTypeName", - "src": "12025:4:0", + "src": "12053:4:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -27981,19 +28057,19 @@ "visibility": "internal" } ], - "src": "12024:6:0" + "src": "12052:6:0" }, - "scope": 1076, - "src": "11977:96:0", + "scope": 1080, + "src": "12005:96:0", "stateMutability": "view", "superFunction": null, "visibility": "public" }, { "body": { - "id": 1016, + "id": 1020, "nodeType": "Block", - "src": "12101:70:0", + "src": "12129:70:0", "statements": [ { "expression": { @@ -28001,12 +28077,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1011, + "id": 1015, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12119:6:0", + "src": "12147:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28015,14 +28091,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f742066726f7a656e", - "id": 1012, + "id": 1016, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12127:25:0", + "src": "12155:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_144124cc12823f56a1037eeced499cee1638a07fba8aa0ce757da7cf592192bf", @@ -28042,21 +28118,21 @@ "typeString": "literal_string \"CrowdFund is not frozen\"" } ], - "id": 1010, + "id": 1014, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12111:7:0", + "referencedDeclaration": 1251, + "src": "12139:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1013, + "id": 1017, "isConstant": false, "isLValue": false, "isPure": false, @@ -28064,41 +28140,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12111:42:0", + "src": "12139:42:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1014, + "id": 1018, "nodeType": "ExpressionStatement", - "src": "12111:42:0" + "src": "12139:42:0" }, { - "id": 1015, + "id": 1019, "nodeType": "PlaceholderStatement", - "src": "12163:1:0" + "src": "12191:1:0" } ] }, "documentation": null, - "id": 1017, + "id": 1021, "name": "onlyFrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1009, + "id": 1013, "nodeType": "ParameterList", "parameters": [], - "src": "12098:2:0" + "src": "12126:2:0" }, - "src": "12079:92:0", + "src": "12107:92:0", "visibility": "internal" }, { "body": { - "id": 1026, + "id": 1030, "nodeType": "Block", - "src": "12201:67:0", + "src": "12229:67:0", "statements": [ { "expression": { @@ -28106,7 +28182,7 @@ "arguments": [ { "argumentTypes": null, - "id": 1021, + "id": 1025, "isConstant": false, "isLValue": false, "isPure": false, @@ -28114,15 +28190,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12219:7:0", + "src": "12247:7:0", "subExpression": { "argumentTypes": null, - "id": 1020, + "id": 1024, "name": "frozen", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 44, - "src": "12220:6:0", + "src": "12248:6:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28136,14 +28212,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e642069732066726f7a656e", - "id": 1022, + "id": 1026, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12228:21:0", + "src": "12256:21:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_21ebfed987d130de5e469bef5346c6c759f8769c3909e5f178aa85e98366503d", @@ -28163,21 +28239,21 @@ "typeString": "literal_string \"CrowdFund is frozen\"" } ], - "id": 1019, + "id": 1023, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12211:7:0", + "referencedDeclaration": 1251, + "src": "12239:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1023, + "id": 1027, "isConstant": false, "isLValue": false, "isPure": false, @@ -28185,41 +28261,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12211:39:0", + "src": "12239:39:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1024, + "id": 1028, "nodeType": "ExpressionStatement", - "src": "12211:39:0" + "src": "12239:39:0" }, { - "id": 1025, + "id": 1029, "nodeType": "PlaceholderStatement", - "src": "12260:1:0" + "src": "12288:1:0" } ] }, "documentation": null, - "id": 1027, + "id": 1031, "name": "onlyUnfrozen", "nodeType": "ModifierDefinition", "parameters": { - "id": 1018, + "id": 1022, "nodeType": "ParameterList", "parameters": [], - "src": "12198:2:0" + "src": "12226:2:0" }, - "src": "12177:91:0", + "src": "12205:91:0", "visibility": "internal" }, { "body": { - "id": 1035, + "id": 1039, "nodeType": "Block", - "src": "12296:84:0", + "src": "12324:84:0", "statements": [ { "expression": { @@ -28227,12 +28303,12 @@ "arguments": [ { "argumentTypes": null, - "id": 1030, + "id": 1034, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12314:18:0", + "src": "12342:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28241,14 +28317,14 @@ { "argumentTypes": null, "hexValue": "526169736520676f616c206973206e6f742072656163686564", - "id": 1031, + "id": 1035, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12334:27:0", + "src": "12362:27:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_d65d4721f73624ca6e381e7ad4c000f40a20c0abe88c0be62360bb906d10ffbe", @@ -28268,21 +28344,21 @@ "typeString": "literal_string \"Raise goal is not reached\"" } ], - "id": 1029, + "id": 1033, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12306:7:0", + "referencedDeclaration": 1251, + "src": "12334:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1032, + "id": 1036, "isConstant": false, "isLValue": false, "isPure": false, @@ -28290,41 +28366,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12306:56:0", + "src": "12334:56:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1033, + "id": 1037, "nodeType": "ExpressionStatement", - "src": "12306:56:0" + "src": "12334:56:0" }, { - "id": 1034, + "id": 1038, "nodeType": "PlaceholderStatement", - "src": "12372:1:0" + "src": "12400:1:0" } ] }, "documentation": null, - "id": 1036, + "id": 1040, "name": "onlyRaised", "nodeType": "ModifierDefinition", "parameters": { - "id": 1028, + "id": 1032, "nodeType": "ParameterList", "parameters": [], - "src": "12293:2:0" + "src": "12321:2:0" }, - "src": "12274:106:0", + "src": "12302:106:0", "visibility": "internal" }, { "body": { - "id": 1049, + "id": 1053, "nodeType": "Block", - "src": "12409:103:0", + "src": "12437:103:0", "statements": [ { "expression": { @@ -28336,7 +28412,7 @@ "typeIdentifier": "t_bool", "typeString": "bool" }, - "id": 1044, + "id": 1048, "isConstant": false, "isLValue": false, "isPure": false, @@ -28347,19 +28423,19 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1041, + "id": 1045, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "leftExpression": { "argumentTypes": null, - "id": 1039, + "id": 1043, "name": "now", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1245, - "src": "12427:3:0", + "referencedDeclaration": 1249, + "src": "12455:3:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -28369,18 +28445,18 @@ "operator": "<=", "rightExpression": { "argumentTypes": null, - "id": 1040, + "id": 1044, "name": "deadline", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 52, - "src": "12434:8:0", + "src": "12462:8:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" } }, - "src": "12427:15:0", + "src": "12455:15:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28390,7 +28466,7 @@ "operator": "&&", "rightExpression": { "argumentTypes": null, - "id": 1043, + "id": 1047, "isConstant": false, "isLValue": false, "isPure": false, @@ -28398,15 +28474,15 @@ "nodeType": "UnaryOperation", "operator": "!", "prefix": true, - "src": "12446:19:0", + "src": "12474:19:0", "subExpression": { "argumentTypes": null, - "id": 1042, + "id": 1046, "name": "isRaiseGoalReached", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 46, - "src": "12447:18:0", + "src": "12475:18:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28417,7 +28493,7 @@ "typeString": "bool" } }, - "src": "12427:38:0", + "src": "12455:38:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28426,14 +28502,14 @@ { "argumentTypes": null, "hexValue": "43726f776446756e64206973206e6f74206f6e676f696e67", - "id": 1045, + "id": 1049, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12467:26:0", + "src": "12495:26:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_843cc2d7a1ba19041b40561b89d21c7571d29e5c5e2d0d1510f441aea3fc1747", @@ -28453,21 +28529,21 @@ "typeString": "literal_string \"CrowdFund is not ongoing\"" } ], - "id": 1038, + "id": 1042, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12419:7:0", + "referencedDeclaration": 1251, + "src": "12447:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1046, + "id": 1050, "isConstant": false, "isLValue": false, "isPure": false, @@ -28475,41 +28551,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12419:75:0", + "src": "12447:75:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1047, + "id": 1051, "nodeType": "ExpressionStatement", - "src": "12419:75:0" + "src": "12447:75:0" }, { - "id": 1048, + "id": 1052, "nodeType": "PlaceholderStatement", - "src": "12504:1:0" + "src": "12532:1:0" } ] }, "documentation": null, - "id": 1050, + "id": 1054, "name": "onlyOnGoing", "nodeType": "ModifierDefinition", "parameters": { - "id": 1037, + "id": 1041, "nodeType": "ParameterList", "parameters": [], - "src": "12406:2:0" + "src": "12434:2:0" }, - "src": "12386:126:0", + "src": "12414:126:0", "visibility": "internal" }, { "body": { - "id": 1064, + "id": 1068, "nodeType": "Block", - "src": "12545:116:0", + "src": "12573:116:0", "statements": [ { "expression": { @@ -28521,7 +28597,7 @@ "typeIdentifier": "t_uint256", "typeString": "uint256" }, - "id": 1059, + "id": 1063, "isConstant": false, "isLValue": false, "isPure": false, @@ -28532,34 +28608,34 @@ "argumentTypes": null, "baseExpression": { "argumentTypes": null, - "id": 1053, + "id": 1057, "name": "contributors", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 68, - "src": "12563:12:0", + "src": "12591:12:0", "typeDescriptions": { "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Contributor_$30_storage_$", "typeString": "mapping(address => struct CrowdFund.Contributor storage ref)" } }, - "id": 1056, + "id": 1060, "indexExpression": { "argumentTypes": null, "expression": { "argumentTypes": null, - "id": 1054, + "id": 1058, "name": "msg", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1243, - "src": "12576:3:0", + "referencedDeclaration": 1247, + "src": "12604:3:0", "typeDescriptions": { "typeIdentifier": "t_magic_message", "typeString": "msg" } }, - "id": 1055, + "id": 1059, "isConstant": false, "isLValue": false, "isPure": false, @@ -28567,7 +28643,7 @@ "memberName": "sender", "nodeType": "MemberAccess", "referencedDeclaration": null, - "src": "12576:10:0", + "src": "12604:10:0", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" @@ -28578,13 +28654,13 @@ "isPure": false, "lValueRequested": false, "nodeType": "IndexAccess", - "src": "12563:24:0", + "src": "12591:24:0", "typeDescriptions": { "typeIdentifier": "t_struct$_Contributor_$30_storage", "typeString": "struct CrowdFund.Contributor storage ref" } }, - "id": 1057, + "id": 1061, "isConstant": false, "isLValue": true, "isPure": false, @@ -28592,7 +28668,7 @@ "memberName": "contributionAmount", "nodeType": "MemberAccess", "referencedDeclaration": 22, - "src": "12563:43:0", + "src": "12591:43:0", "typeDescriptions": { "typeIdentifier": "t_uint256", "typeString": "uint256" @@ -28603,14 +28679,14 @@ "rightExpression": { "argumentTypes": null, "hexValue": "30", - "id": 1058, + "id": 1062, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", - "src": "12610:1:0", + "src": "12638:1:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_rational_0_by_1", @@ -28618,7 +28694,7 @@ }, "value": "0" }, - "src": "12563:48:0", + "src": "12591:48:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28627,14 +28703,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f74206120636f6e7472696275746f72", - "id": 1060, + "id": 1064, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12613:29:0", + "src": "12641:29:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_27c7012fc5b199883f3d6c1e7d0d3c9cd967752b2ed8ba1703713f2d84425e7b", @@ -28654,21 +28730,21 @@ "typeString": "literal_string \"Caller is not a contributor\"" } ], - "id": 1052, + "id": 1056, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12555:7:0", + "referencedDeclaration": 1251, + "src": "12583:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1061, + "id": 1065, "isConstant": false, "isLValue": false, "isPure": false, @@ -28676,41 +28752,41 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12555:88:0", + "src": "12583:88:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1062, + "id": 1066, "nodeType": "ExpressionStatement", - "src": "12555:88:0" + "src": "12583:88:0" }, { - "id": 1063, + "id": 1067, "nodeType": "PlaceholderStatement", - "src": "12653:1:0" + "src": "12681:1:0" } ] }, "documentation": null, - "id": 1065, + "id": 1069, "name": "onlyContributor", "nodeType": "ModifierDefinition", "parameters": { - "id": 1051, + "id": 1055, "nodeType": "ParameterList", "parameters": [], - "src": "12542:2:0" + "src": "12570:2:0" }, - "src": "12518:143:0", + "src": "12546:143:0", "visibility": "internal" }, { "body": { - "id": 1074, + "id": 1078, "nodeType": "Block", - "src": "12690:81:0", + "src": "12718:81:0", "statements": [ { "expression": { @@ -28721,18 +28797,18 @@ "arguments": [], "expression": { "argumentTypes": [], - "id": 1068, + "id": 1072, "name": "isCallerTrustee", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 955, - "src": "12708:15:0", + "referencedDeclaration": 959, + "src": "12736:15:0", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, - "id": 1069, + "id": 1073, "isConstant": false, "isLValue": false, "isPure": false, @@ -28740,7 +28816,7 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12708:17:0", + "src": "12736:17:0", "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" @@ -28749,14 +28825,14 @@ { "argumentTypes": null, "hexValue": "43616c6c6572206973206e6f7420612074727573746565", - "id": 1070, + "id": 1074, "isConstant": false, "isLValue": false, "isPure": true, "kind": "string", "lValueRequested": false, "nodeType": "Literal", - "src": "12727:25:0", + "src": "12755:25:0", "subdenomination": null, "typeDescriptions": { "typeIdentifier": "t_stringliteral_efecdf3be8b72bfbf67a07f441dfdb20b968592ad6d7fba48a91dfa72a34f2d8", @@ -28776,21 +28852,21 @@ "typeString": "literal_string \"Caller is not a trustee\"" } ], - "id": 1067, + "id": 1071, "name": "require", "nodeType": "Identifier", "overloadedDeclarations": [ - 1246, - 1247 + 1250, + 1251 ], - "referencedDeclaration": 1247, - "src": "12700:7:0", + "referencedDeclaration": 1251, + "src": "12728:7:0", "typeDescriptions": { "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", "typeString": "function (bool,string memory) pure" } }, - "id": 1071, + "id": 1075, "isConstant": false, "isLValue": false, "isPure": false, @@ -28798,42 +28874,42 @@ "lValueRequested": false, "names": [], "nodeType": "FunctionCall", - "src": "12700:53:0", + "src": "12728:53:0", "typeDescriptions": { "typeIdentifier": "t_tuple$__$", "typeString": "tuple()" } }, - "id": 1072, + "id": 1076, "nodeType": "ExpressionStatement", - "src": "12700:53:0" + "src": "12728:53:0" }, { - "id": 1073, + "id": 1077, "nodeType": "PlaceholderStatement", - "src": "12763:1:0" + "src": "12791:1:0" } ] }, "documentation": null, - "id": 1075, + "id": 1079, "name": "onlyTrustee", "nodeType": "ModifierDefinition", "parameters": { - "id": 1066, + "id": 1070, "nodeType": "ParameterList", "parameters": [], - "src": "12687:2:0" + "src": "12715:2:0" }, - "src": "12667:104:0", + "src": "12695:104:0", "visibility": "internal" } ], - "scope": 1077, - "src": "87:12687:0" + "scope": 1081, + "src": "87:12715:0" } ], - "src": "0:12775:0" + "src": "0:12802:0" }, "compiler": { "name": "solc", @@ -28841,5 +28917,5 @@ }, "networks": {}, "schemaVersion": "2.0.1", - "updatedAt": "2018-11-16T20:36:37.827Z" + "updatedAt": "2018-09-26T03:49:30.936Z" } \ No newline at end of file diff --git a/contract/build/contracts/CrowdFundFactory.json b/contract/build/contracts/CrowdFundFactory.json index 651d41db..b42770e5 100644 --- a/contract/build/contracts/CrowdFundFactory.json +++ b/contract/build/contracts/CrowdFundFactory.json @@ -57,24 +57,24 @@ "type": "function" } ], - "bytecode": "0x608060405234801561001057600080fd5b50613684806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132e08061037983390190560060806040523480156200001157600080fd5b50604051620032e0380380620032e0833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ad7179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c43806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029a165627a7a72305820934808680be9c81f1fba40415b4ca3b9b11aaa579220c370ce09f0bdcdd30d220029", - "deployedBytecode": "0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132e08061037983390190560060806040523480156200001157600080fd5b50604051620032e0380380620032e0833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ad7179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c43806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e68565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e94565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610eb5565b005b34801561041557600080fd5b5061041e61122a565b005b34801561042c57600080fd5b5061044d60048036038101908080351515906020019092919050505061143e565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061181c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061185a565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118a6565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ac565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b2f565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611ba8565b005b3480156105f357600080fd5b506105fc61205d565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612063565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061243c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c161247a565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec612480565b6040518082815260200191505060405180910390f35b61070a6124a1565b005b34801561071857600080fd5b50610721612a26565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a39565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a4c565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612a98565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612abe90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e60565b610e3b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e1b57fe5b906000526020600020906004020160010154612ad790919063ffffffff16565b600c87815481101515610e4a57fe5b9060005260206000209060040201600101819055505b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610ead600284612af390919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f3d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915061118d60055461117f3073ffffffffffffffffffffffffffffffffffffffff163185612af390919063ffffffff16565b612b2b90919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111d5573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112bb610850565b92506112c5612a98565b91506112d2600754610e94565b905082806112dd5750815b806112e55750805b151561137f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113ad5760008060006101000a81548160ff021916908360028111156113a357fe5b0217905550611400565b81156113db5760016000806101000a81548160ff021916908360028111156113d157fe5b02179055506113ff565b60026000806101000a81548160ff021916908360028111156113f957fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156114fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff16151561157e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611603576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117ba576117af600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612abe90919063ffffffff16565b600781905550611818565b611811600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ad790919063ffffffff16565b6007819055505b5050565b600b8181548110151561182b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118b7610850565b151561192b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611af457600a828154811015156119d057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119b4565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8057fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bb8610850565b1515611c2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d4457fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d7557fe5b906000526020600020906004020160020154119350611db3600c87815481101515611d9c57fe5b906000526020600020906004020160010154610e94565b925084151515611e2b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611ea457600c81815481101515611e6f57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611e97578091505b8080600101915050611e53565b6001820186141515611f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f5557fe5b9060005260206000209060040201600201541415611ff857600086148015611f895750600060039054906101000a900460ff165b15611fb9576001600c87815481101515611f9f57fe5b906000526020600020906004020160020181905550611ff3565b611fce60015442612ad790919063ffffffff16565b600c87815481101515611fdd57fe5b9060005260206000209060040201600201819055505b612055565b8380156120025750825b156120545761202f6120206002600154612af390919063ffffffff16565b42612ad790919063ffffffff16565b600c8781548110151561203e57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612172576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561218257fe5b9060005260206000209060040201600201541093506121c0600c868154811015156121a957fe5b906000526020600020906004020160010154610e94565b9250600c858154811015156121d157fe5b906000526020600020906004020160030160009054906101000a900460ff1691508380156121fd575082155b8015612207575081155b156123a1576001600c8681548110151561221d57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561225457fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122d0573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161235b86600c80549050612abe90919063ffffffff16565b141561239c57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612435565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561244b57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff16600281111561249c57fe5b905090565b600080600060025442111580156124c55750600060029054906101000a900460ff16155b1515612539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125d334600454612ad790919063ffffffff16565b92506003548311151515612675576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061268d5750805b151561274d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561290857608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127de5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612859929190612b41565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129a4565b61295d34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ad790919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129d3576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a5b57fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ab95750600060029054906101000a900460ff16155b905090565b6000828211151515612acc57fe5b818303905092915050565b60008183019050828110151515612aea57fe5b80905092915050565b600080831415612b065760009050612b25565b8183029050818382811515612b1757fe5b04141515612b2157fe5b8090505b92915050565b60008183811515612b3857fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612bd65791602002820160005b83821115612ba757835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b6a565b8015612bd45782816101000a81549060ff0219169055600101602081600001049283019260010302612ba7565b505b509050612be39190612be7565b5090565b612c1491905b80821115612c1057600081816101000a81549060ff021916905550600101612bed565b5090565b905600a165627a7a7230582051351396444f74bc4a8b3921cf045e1b2aea376db653835bbe15cc04725c9b3d0029a165627a7a72305820934808680be9c81f1fba40415b4ca3b9b11aaa579220c370ce09f0bdcdd30d220029", + "bytecode": "0x608060405234801561001057600080fd5b50613692806100206000396000f300608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132ee8061037983390190560060806040523480156200001157600080fd5b50604051620032ee380380620032ee833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ae5179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c51806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029a165627a7a7230582038c1809b6ce57218a64a17a9211e1b79cca7e3c5a544e99070a9b555c6cb52430029", + "deployedBytecode": "0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806350f74ec014610046575b600080fd5b34801561005257600080fd5b5061013760048036038101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192908035906020019092919080359060200190929190803515159060200190929190505050610179565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000808888888888888861018b610368565b808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200186815260200185815260200184151515158152602001838103835288818151815260200191508051906020019060200280838360005b8381101561021d578082015181840152602081019050610202565b50505050905001838103825287818151815260200191508051906020019060200280838360005b8381101561025f578082015181840152602081019050610244565b505050509050019950505050505050505050604051809103906000f08015801561028d573d6000803e3d6000fd5b5090507fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31281604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a160008190806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505080915050979650505050505050565b6040516132ee8061037983390190560060806040523480156200001157600080fd5b50604051620032ee380380620032ee833981018060405281019080805190602001909291908051906020019092919080518201929190602001805182019291906020018051906020019092919080519060200190929190805190602001909291905050506000806000670de0b6b3a76400008a1015151562000121576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001807f526169736520676f616c20697320736d616c6c6572207468616e20312065746881526020017f657200000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001885110158015620001365750600a885111155b1515620001d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001807f5472757374656520616464726573736573206d757374206265206174206c656181526020017f7374203120616e64206e6f74206d6f7265207468616e2031300000000000000081525060400191505060405180910390fd5b6001875110158015620001e65750600a875111155b151562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001807f4d696c6573746f6e6573206d757374206265206174206c65617374203120616e81526020017f64206e6f74206d6f7265207468616e203130000000000000000000000000000081525060400191505060405180910390fd5b60009250600091505b865182101562000416578682815181101515620002a357fe5b9060200190602002015190506000811115156200034e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001807f4d696c6573746f6e6520616d6f756e74206d757374206265206772656174657281526020017f207468616e20300000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6200037181846200059b6401000000000262002ae5179091906401000000009004565b9250600c6080604051908101604052808381526020016000815260200160008152602001600015158152509080600181540180825580915050906001820390600052602060002090600402016000909192909190915060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555050505081806001019250506200028a565b8983141515620004b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f4d696c6573746f6e6520746f74616c206d75737420657175616c20726169736581526020017f20676f616c00000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b60016006819055508960038190555088600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555087600b90805190602001906200051c929190620005b8565b508542016002819055508460018190555083600060036101000a81548160ff02191690831515021790555060008060026101000a81548160ff021916908315150217905550600060078190555060008060016101000a81548160ff0219169083151502179055506000600481905550505050505050505050506200068d565b60008183019050828110151515620005af57fe5b80905092915050565b82805482825590600052602060002090810192821562000634579160200282015b82811115620006335782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190620005d9565b5b50905062000643919062000647565b5090565b6200068a91905b808211156200068657600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055506001016200064e565b5090565b90565b612c51806200069d6000396000f300608060405260043610610175576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063054f7d9c1461017a57806318329822146101a95780631f6d4942146101d45780631fe4d9dd1461024157806326e6074b1461027057806329dcb0cf1461029b5780632b99d7e4146102c657806337b028ef146102ff57806338af3eed1461032a57806347680fca1461038157806351cff8d9146103c6578063590e1ae31461040957806369d596fc14610420578063717d63a41461044f5780637923de2a146104bc5780637b3e5e7b1461051357806383197ef01461053e578063966778061461055557806396b6a34e146105ba5780639d5b06f7146105e75780639ec45bbe146106125780639f5557981461063f578063a3e9436c146106ac578063d6383230146106d7578063d7bb99ba14610702578063d9a992431461070c578063e88329691461073b578063e89e4ed61461076a578063f4163340146107c4575b600080fd5b34801561018657600080fd5b5061018f6107f3565b604051808215151515815260200191505060405180910390f35b3480156101b557600080fd5b506101be610806565b6040518082815260200191505060405180910390f35b3480156101e057600080fd5b50610215600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061080c565b604051808481526020018315151515815260200182151515158152602001935050505060405180910390f35b34801561024d57600080fd5b50610256610850565b604051808215151515815260200191505060405180910390f35b34801561027c57600080fd5b506102856108f1565b6040518082815260200191505060405180910390f35b3480156102a757600080fd5b506102b06108f7565b6040518082815260200191505060405180910390f35b3480156102d257600080fd5b506102fd600480360381019080803590602001909291908035151590602001909291905050506108fd565b005b34801561030b57600080fd5b50610314610e6f565b6040518082815260200191505060405180910390f35b34801561033657600080fd5b5061033f610e75565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561038d57600080fd5b506103ac60048036038101908080359060200190929190505050610e9b565b604051808215151515815260200191505060405180910390f35b3480156103d257600080fd5b50610407600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ebc565b005b34801561041557600080fd5b5061041e611231565b005b34801561042c57600080fd5b5061044d600480360381019080803515159060200190929190505050611445565b005b34801561045b57600080fd5b5061047a6004803603810190808035906020019092919050505061182a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104c857600080fd5b506104fd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611868565b6040518082815260200191505060405180910390f35b34801561051f57600080fd5b506105286118b4565b6040518082815260200191505060405180910390f35b34801561054a57600080fd5b506105536118ba565b005b34801561056157600080fd5b506105a0600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611b3d565b604051808215151515815260200191505060405180910390f35b3480156105c657600080fd5b506105e560048036038101908080359060200190929190505050611bb6565b005b3480156105f357600080fd5b506105fc61206b565b6040518082815260200191505060405180910390f35b34801561061e57600080fd5b5061063d60048036038101908080359060200190929190505050612071565b005b34801561064b57600080fd5b5061066a6004803603810190808035906020019092919050505061244a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156106b857600080fd5b506106c1612488565b6040518082815260200191505060405180910390f35b3480156106e357600080fd5b506106ec61248e565b6040518082815260200191505060405180910390f35b61070a6124af565b005b34801561071857600080fd5b50610721612a34565b604051808215151515815260200191505060405180910390f35b34801561074757600080fd5b50610750612a47565b604051808215151515815260200191505060405180910390f35b34801561077657600080fd5b5061079560048036038101908080359060200190929190505050612a5a565b604051808581526020018481526020018381526020018215151515815260200194505050505060405180910390f35b3480156107d057600080fd5b506107d9612aa6565b604051808215151515815260200191505060405180910390f35b600060019054906101000a900460ff1681565b60075481565b60096020528060005260406000206000915090508060000154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16905083565b600080600090505b600b805490508110156108e857600b8181548110151561087457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156108db57600191506108ed565b8080600101915050610858565b600091505b5090565b60055481565b60025481565b6000806000806000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141515156109be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515610a42576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515610ac7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010186815481101515610b1657fe5b90600052602060002090602091828204019190069054906101000a900460ff16935084151584151514151515610bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001807f566f74652076616c7565206d75737420626520646966666572656e742074686181526020017f6e206578697374696e6720766f7465207374617465000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515610beb57fe5b90600052602060002090600402016002015411925042600c87815481101515610c1057fe5b90600052602060002090600402016002015411159150828015610c31575081155b9050801515610ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d696c6573746f6e6520766f74696e67206d757374206265206f70656e00000081525060200191505060405180910390fd5b84600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010187815481101515610cf857fe5b90600052602060002090602091828204019190066101000a81548160ff021916908315150217905550841515610dc657610d9d600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610d7d57fe5b906000526020600020906004020160010154612acc90919063ffffffff16565b600c87815481101515610dac57fe5b906000526020600020906004020160010181905550610e67565b8415610e6657610e41600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600c88815481101515610e2157fe5b906000526020600020906004020160010154612ae590919063ffffffff16565b600c87815481101515610e5057fe5b9060005260206000209060040201600101819055505b5b505050505050565b60065481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600454610eb4600284612b0190919063ffffffff16565b119050919050565b60008060008060019054906101000a900460ff161515610f44576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515610fc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff169250821515156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001807f537065636966696564206164647265737320697320616c72656164792072656681526020017f756e64656400000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b6001600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160016101000a81548160ff021916908315150217905550600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015491506111946005546111863073ffffffffffffffffffffffffffffffffffffffff163185612b0190919063ffffffff16565b612b3990919063ffffffff16565b90508373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156111dc573d6000803e3d6000fd5b508373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a250505050565b60008060008060019054906101000a900460ff161515156112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6112c2610850565b92506112cc612aa6565b91506112d9600754610e9b565b905082806112e45750815b806112ec5750805b1515611386576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001807f526571756972656420636f6e646974696f6e7320666f7220726566756e64206181526020017f7265206e6f74206d65740000000000000000000000000000000000000000000081525060400191505060405180910390fd5b82156113b45760008060006101000a81548160ff021916908360028111156113aa57fe5b0217905550611407565b81156113e25760016000806101000a81548160ff021916908360028111156113d857fe5b0217905550611406565b60026000806101000a81548160ff0219169083600281111561140057fe5b02179055505b5b6001600060016101000a81548160ff0219169083151502179055503073ffffffffffffffffffffffffffffffffffffffff1631600581905550505050565b600080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414151515611501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f43616c6c6572206973206e6f74206120636f6e7472696275746f72000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611585576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615151561160a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900460ff169050801515821515141515156116fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e8152602001807f4578697374696e6720766f7465207374617465206973206964656e746963616c81526020017f20746f20766f74652076616c756500000000000000000000000000000000000081525060400191505060405180910390fd5b81600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055508115156117c1576117b6600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612acc90919063ffffffff16565b600781905550611826565b81156118255761181e600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600754612ae590919063ffffffff16565b6007819055505b5b5050565b600b8181548110151561183957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b60045481565b6000806118c5610850565b1515611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff1615156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43726f776446756e64206973206e6f742066726f7a656e00000000000000000081525060200191505060405180910390fd5b600091505b600a80549050821015611b0257600a828154811015156119de57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160019054906101000a900460ff161515611af5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d8152602001807f4174206c65617374206f6e6520636f6e7472696275746f7220686173206e6f7481526020017f2079657420726566756e6465640000000000000000000000000000000000000081525060400191505060405180910390fd5b81806001019250506119c2565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010182815481101515611b8e57fe5b90600052602060002090602091828204019190069054906101000a900460ff16905092915050565b6000806000806000611bc6610850565b1515611c3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f43616c6c6572206973206e6f742061207472757374656500000000000000000081525060200191505060405180910390fd5b600060029054906101000a900460ff161515611cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515611d43576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b600c86815481101515611d5257fe5b906000526020600020906004020160030160009054906101000a900460ff16945042600c87815481101515611d8357fe5b906000526020600020906004020160020154119350611dc1600c87815481101515611daa57fe5b906000526020600020906004020160010154610e9b565b925084151515611e39576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f4d696c6573746f6e6520616c726561647920706169640000000000000000000081525060200191505060405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9150600090505b600c80549050811015611eb257600c81815481101515611e7d57fe5b906000526020600020906004020160030160009054906101000a900460ff1615611ea5578091505b8080600101915050611e61565b6001820186141515611f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260348152602001807f4d696c6573746f6e652072657175657374206d75737420626520666f7220666981526020017f72737420756e70616964206d696c6573746f6e6500000000000000000000000081525060400191505060405180910390fd5b6000600c87815481101515611f6357fe5b906000526020600020906004020160020154141561200657600086148015611f975750600060039054906101000a900460ff165b15611fc7576001600c87815481101515611fad57fe5b906000526020600020906004020160020181905550612001565b611fdc60015442612ae590919063ffffffff16565b600c87815481101515611feb57fe5b9060005260206000209060040201600201819055505b612063565b8380156120105750825b156120625761203d61202e6002600154612b0190919063ffffffff16565b42612ae590919063ffffffff16565b600c8781548110151561204c57fe5b9060005260206000209060040201600201819055505b5b505050505050565b60015481565b600080600080600060029054906101000a900460ff1615156120fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f526169736520676f616c206973206e6f7420726561636865640000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff16151515612180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b42600c8681548110151561219057fe5b9060005260206000209060040201600201541093506121ce600c868154811015156121b757fe5b906000526020600020906004020160010154610e9b565b9250600c858154811015156121df57fe5b906000526020600020906004020160030160009054906101000a900460ff16915083801561220b575082155b8015612215575081155b156123af576001600c8681548110151561222b57fe5b906000526020600020906004020160030160006101000a81548160ff021916908315150217905550600c8581548110151561226257fe5b9060005260206000209060040201600001549050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156122de573d6000803e3d6000fd5b50600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5826040518082815260200191505060405180910390a2600161236986600c80549050612acc90919063ffffffff16565b14156123aa57600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16ff5b612443565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f726571756972656420636f6e646974696f6e732077657265206e6f742073617481526020017f697366696564000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b5050505050565b600a8181548110151561245957fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60008060009054906101000a900460ff1660028111156124aa57fe5b905090565b600080600060025442111580156124d35750600060029054906101000a900460ff16155b1515612547576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f43726f776446756e64206973206e6f74206f6e676f696e67000000000000000081525060200191505060405180910390fd5b600060019054906101000a900460ff161515156125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f43726f776446756e642069732066726f7a656e0000000000000000000000000081525060200191505060405180910390fd5b6125e134600454612ae590919063ffffffff16565b92506003548311151515612683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001807f436f6e747269627574696f6e206578636565647320746865207261697365206781526020017f6f616c2e0000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600654341015915060035483149050818061269b5750805b151561275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604d8152602001807f6d73672e76616c75652067726561746572207468616e206d696e696d756d2c2081526020017f6f72206d73672e76616c7565203d3d2072656d61696e696e6720616d6f756e7481526020017f20746f206265207261697365640000000000000000000000000000000000000081525060600191505060405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154141561291657608060405190810160405280348152602001600c805490506040519080825280602002602001820160405280156127ec5781602001602082028038833980820191505090505b50815260200160001515815260200160001515815250600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082015181600001556020820151816001019080519060200190612867929190612b4f565b5060408201518160020160006101000a81548160ff02191690831515021790555060608201518160020160016101000a81548160ff021916908315150217905550905050600a3390806001815401808255809150509060018203906000526020600020016000909192909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506129b2565b61296b34600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154612ae590919063ffffffff16565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055505b8260048190555060035460045414156129e1576001600060026101000a81548160ff0219169083151502179055505b3373ffffffffffffffffffffffffffffffffffffffff167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4346040518082815260200191505060405180910390a2505050565b600060029054906101000a900460ff1681565b600060039054906101000a900460ff1681565b600c81815481101515612a6957fe5b90600052602060002090600402016000915090508060000154908060010154908060020154908060030160009054906101000a900460ff16905084565b60006002544210158015612ac75750600060029054906101000a900460ff16155b905090565b6000828211151515612ada57fe5b818303905092915050565b60008183019050828110151515612af857fe5b80905092915050565b600080831415612b145760009050612b33565b8183029050818382811515612b2557fe5b04141515612b2f57fe5b8090505b92915050565b60008183811515612b4657fe5b04905092915050565b82805482825590600052602060002090601f01602090048101928215612be45791602002820160005b83821115612bb557835183826101000a81548160ff0219169083151502179055509260200192600101602081600001049283019260010302612b78565b8015612be25782816101000a81549060ff0219169055600101602081600001049283019260010302612bb5565b505b509050612bf19190612bf5565b5090565b612c2291905b80821115612c1e57600081816101000a81549060ff021916905550600101612bfb565b5090565b905600a165627a7a72305820b725d6ed533ba3c21fcb343e8c393171f8c562c1668224983554c10c88ce87060029a165627a7a7230582038c1809b6ce57218a64a17a9211e1b79cca7e3c5a544e99070a9b555c6cb52430029", "sourceMap": "52:860:1:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52:860:1;;;;;;;", "deployedSourceMap": "52:860:1:-;;;;;;;;;;;;;;;;;;;;;;;;159:751;;8:9:-1;5:2;;;30:1;27;20:12;5:2;159:751:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;462:7;481:28;539:15;568:13;595:17;626:13;653:17;684:30;728:29;512:255;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;512:255:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;512:255:1;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;512:255:1;481:286;;782:37;798:20;782:37;;;;;;;;;;;;;;;;;;;;;;829:10;845:20;829:37;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;829:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;883:20;876:27;;159:751;;;;;;;;;;:::o;52:860::-;;;;;;;;;;:::o", "source": "pragma solidity ^0.4.24;\nimport \"./CrowdFund.sol\";\n\ncontract CrowdFundFactory {\n address[] crowdfunds;\n\n event ContractCreated(address newAddress);\n\n function createCrowdFund (\n uint raiseGoalAmount, \n address payOutAddress, \n address[] trusteesAddresses, \n uint[] allMilestones,\n uint durationInSeconds,\n uint milestoneVotingPeriodInSeconds,\n bool immediateFirstMilestonePayout\n ) public returns(address) {\n address newCrowdFundContract = new CrowdFund(\n raiseGoalAmount,\n payOutAddress,\n trusteesAddresses,\n allMilestones,\n durationInSeconds,\n milestoneVotingPeriodInSeconds,\n immediateFirstMilestonePayout\n );\n emit ContractCreated(newCrowdFundContract);\n crowdfunds.push(newCrowdFundContract);\n return newCrowdFundContract;\n }\n}", - "sourcePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFundFactory.sol", + "sourcePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFundFactory.sol", "ast": { - "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFundFactory.sol", + "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFundFactory.sol", "exportedSymbols": { "CrowdFundFactory": [ - 1134 + 1138 ] }, - "id": 1135, + "id": 1139, "nodeType": "SourceUnit", "nodes": [ { - "id": 1078, + "id": 1082, "literals": [ "solidity", "^", @@ -85,12 +85,12 @@ "src": "0:24:1" }, { - "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", "file": "./CrowdFund.sol", - "id": 1079, + "id": 1083, "nodeType": "ImportDirective", - "scope": 1135, - "sourceUnit": 1077, + "scope": 1139, + "sourceUnit": 1081, "src": "25:25:1", "symbolAliases": [], "unitAlias": "" @@ -98,24 +98,24 @@ { "baseContracts": [], "contractDependencies": [ - 1076 + 1080 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1134, + "id": 1138, "linearizedBaseContracts": [ - 1134 + 1138 ], "name": "CrowdFundFactory", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, - "id": 1082, + "id": 1086, "name": "crowdfunds", "nodeType": "VariableDeclaration", - "scope": 1134, + "scope": 1138, "src": "84:20:1", "stateVariable": true, "storageLocation": "default", @@ -125,7 +125,7 @@ }, "typeName": { "baseType": { - "id": 1080, + "id": 1084, "name": "address", "nodeType": "ElementaryTypeName", "src": "84:7:1", @@ -134,7 +134,7 @@ "typeString": "address" } }, - "id": 1081, + "id": 1085, "length": null, "nodeType": "ArrayTypeName", "src": "84:9:1", @@ -149,20 +149,20 @@ { "anonymous": false, "documentation": null, - "id": 1086, + "id": 1090, "name": "ContractCreated", "nodeType": "EventDefinition", "parameters": { - "id": 1085, + "id": 1089, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1084, + "id": 1088, "indexed": false, "name": "newAddress", "nodeType": "VariableDeclaration", - "scope": 1086, + "scope": 1090, "src": "133:18:1", "stateVariable": false, "storageLocation": "default", @@ -171,7 +171,7 @@ "typeString": "address" }, "typeName": { - "id": 1083, + "id": 1087, "name": "address", "nodeType": "ElementaryTypeName", "src": "133:7:1", @@ -190,21 +190,21 @@ }, { "body": { - "id": 1132, + "id": 1136, "nodeType": "Block", "src": "471:439:1", "statements": [ { "assignments": [ - 1108 + 1112 ], "declarations": [ { "constant": false, - "id": 1108, + "id": 1112, "name": "newCrowdFundContract", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "481:28:1", "stateVariable": false, "storageLocation": "default", @@ -213,7 +213,7 @@ "typeString": "address" }, "typeName": { - "id": 1107, + "id": 1111, "name": "address", "nodeType": "ElementaryTypeName", "src": "481:7:1", @@ -226,17 +226,17 @@ "visibility": "internal" } ], - "id": 1119, + "id": 1123, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 1111, + "id": 1115, "name": "raiseGoalAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1088, + "referencedDeclaration": 1092, "src": "539:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -245,11 +245,11 @@ }, { "argumentTypes": null, - "id": 1112, + "id": 1116, "name": "payOutAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1090, + "referencedDeclaration": 1094, "src": "568:13:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -258,11 +258,11 @@ }, { "argumentTypes": null, - "id": 1113, + "id": 1117, "name": "trusteesAddresses", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1093, + "referencedDeclaration": 1097, "src": "595:17:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", @@ -271,11 +271,11 @@ }, { "argumentTypes": null, - "id": 1114, + "id": 1118, "name": "allMilestones", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1096, + "referencedDeclaration": 1100, "src": "626:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -284,11 +284,11 @@ }, { "argumentTypes": null, - "id": 1115, + "id": 1119, "name": "durationInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1098, + "referencedDeclaration": 1102, "src": "653:17:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -297,11 +297,11 @@ }, { "argumentTypes": null, - "id": 1116, + "id": 1120, "name": "milestoneVotingPeriodInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1100, + "referencedDeclaration": 1104, "src": "684:30:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -310,11 +310,11 @@ }, { "argumentTypes": null, - "id": 1117, + "id": 1121, "name": "immediateFirstMilestonePayout", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1102, + "referencedDeclaration": 1106, "src": "728:29:1", "typeDescriptions": { "typeIdentifier": "t_bool", @@ -353,7 +353,7 @@ "typeString": "bool" } ], - "id": 1110, + "id": 1114, "isConstant": false, "isLValue": false, "isPure": false, @@ -361,23 +361,23 @@ "nodeType": "NewExpression", "src": "512:13:1", "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1076_$", + "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1080_$", "typeString": "function (uint256,address,address[] memory,uint256[] memory,uint256,uint256,bool) returns (contract CrowdFund)" }, "typeName": { "contractScope": null, - "id": 1109, + "id": 1113, "name": "CrowdFund", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1076, + "referencedDeclaration": 1080, "src": "516:9:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } } }, - "id": 1118, + "id": 1122, "isConstant": false, "isLValue": false, "isPure": false, @@ -387,7 +387,7 @@ "nodeType": "FunctionCall", "src": "512:255:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } }, @@ -400,11 +400,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1121, + "id": 1125, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1108, + "referencedDeclaration": 1112, "src": "798:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -419,18 +419,18 @@ "typeString": "address" } ], - "id": 1120, + "id": 1124, "name": "ContractCreated", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1086, + "referencedDeclaration": 1090, "src": "782:15:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 1122, + "id": 1126, "isConstant": false, "isLValue": false, "isPure": false, @@ -444,7 +444,7 @@ "typeString": "tuple()" } }, - "id": 1123, + "id": 1127, "nodeType": "EmitStatement", "src": "777:42:1" }, @@ -454,11 +454,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1127, + "id": 1131, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1108, + "referencedDeclaration": 1112, "src": "845:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -475,18 +475,18 @@ ], "expression": { "argumentTypes": null, - "id": 1124, + "id": 1128, "name": "crowdfunds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1082, + "referencedDeclaration": 1086, "src": "829:10:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 1126, + "id": 1130, "isConstant": false, "isLValue": false, "isPure": false, @@ -500,7 +500,7 @@ "typeString": "function (address) returns (uint256)" } }, - "id": 1128, + "id": 1132, "isConstant": false, "isLValue": false, "isPure": false, @@ -514,33 +514,33 @@ "typeString": "uint256" } }, - "id": 1129, + "id": 1133, "nodeType": "ExpressionStatement", "src": "829:37:1" }, { "expression": { "argumentTypes": null, - "id": 1130, + "id": 1134, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1108, + "referencedDeclaration": 1112, "src": "883:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "functionReturnParameters": 1106, - "id": 1131, + "functionReturnParameters": 1110, + "id": 1135, "nodeType": "Return", "src": "876:27:1" } ] }, "documentation": null, - "id": 1133, + "id": 1137, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -548,15 +548,15 @@ "name": "createCrowdFund", "nodeType": "FunctionDefinition", "parameters": { - "id": 1103, + "id": 1107, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1088, + "id": 1092, "name": "raiseGoalAmount", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "194:20:1", "stateVariable": false, "storageLocation": "default", @@ -565,7 +565,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1087, + "id": 1091, "name": "uint", "nodeType": "ElementaryTypeName", "src": "194:4:1", @@ -579,10 +579,10 @@ }, { "constant": false, - "id": 1090, + "id": 1094, "name": "payOutAddress", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "225:21:1", "stateVariable": false, "storageLocation": "default", @@ -591,7 +591,7 @@ "typeString": "address" }, "typeName": { - "id": 1089, + "id": 1093, "name": "address", "nodeType": "ElementaryTypeName", "src": "225:7:1", @@ -605,10 +605,10 @@ }, { "constant": false, - "id": 1093, + "id": 1097, "name": "trusteesAddresses", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "257:27:1", "stateVariable": false, "storageLocation": "default", @@ -618,7 +618,7 @@ }, "typeName": { "baseType": { - "id": 1091, + "id": 1095, "name": "address", "nodeType": "ElementaryTypeName", "src": "257:7:1", @@ -627,7 +627,7 @@ "typeString": "address" } }, - "id": 1092, + "id": 1096, "length": null, "nodeType": "ArrayTypeName", "src": "257:9:1", @@ -641,10 +641,10 @@ }, { "constant": false, - "id": 1096, + "id": 1100, "name": "allMilestones", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "295:20:1", "stateVariable": false, "storageLocation": "default", @@ -654,7 +654,7 @@ }, "typeName": { "baseType": { - "id": 1094, + "id": 1098, "name": "uint", "nodeType": "ElementaryTypeName", "src": "295:4:1", @@ -663,7 +663,7 @@ "typeString": "uint256" } }, - "id": 1095, + "id": 1099, "length": null, "nodeType": "ArrayTypeName", "src": "295:6:1", @@ -677,10 +677,10 @@ }, { "constant": false, - "id": 1098, + "id": 1102, "name": "durationInSeconds", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "325:22:1", "stateVariable": false, "storageLocation": "default", @@ -689,7 +689,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1097, + "id": 1101, "name": "uint", "nodeType": "ElementaryTypeName", "src": "325:4:1", @@ -703,10 +703,10 @@ }, { "constant": false, - "id": 1100, + "id": 1104, "name": "milestoneVotingPeriodInSeconds", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "357:35:1", "stateVariable": false, "storageLocation": "default", @@ -715,7 +715,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1099, + "id": 1103, "name": "uint", "nodeType": "ElementaryTypeName", "src": "357:4:1", @@ -729,10 +729,10 @@ }, { "constant": false, - "id": 1102, + "id": 1106, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "402:34:1", "stateVariable": false, "storageLocation": "default", @@ -741,7 +741,7 @@ "typeString": "bool" }, "typeName": { - "id": 1101, + "id": 1105, "name": "bool", "nodeType": "ElementaryTypeName", "src": "402:4:1", @@ -758,15 +758,15 @@ }, "payable": false, "returnParameters": { - "id": 1106, + "id": 1110, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1105, + "id": 1109, "name": "", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "462:7:1", "stateVariable": false, "storageLocation": "default", @@ -775,7 +775,7 @@ "typeString": "address" }, "typeName": { - "id": 1104, + "id": 1108, "name": "address", "nodeType": "ElementaryTypeName", "src": "462:7:1", @@ -790,31 +790,31 @@ ], "src": "461:9:1" }, - "scope": 1134, + "scope": 1138, "src": "159:751:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" } ], - "scope": 1135, + "scope": 1139, "src": "52:860:1" } ], "src": "0:912:1" }, "legacyAST": { - "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFundFactory.sol", + "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFundFactory.sol", "exportedSymbols": { "CrowdFundFactory": [ - 1134 + 1138 ] }, - "id": 1135, + "id": 1139, "nodeType": "SourceUnit", "nodes": [ { - "id": 1078, + "id": 1082, "literals": [ "solidity", "^", @@ -825,12 +825,12 @@ "src": "0:24:1" }, { - "absolutePath": "/Users/will/Documents/grant-monorepo/contract/contracts/CrowdFund.sol", + "absolutePath": "/Users/danielternyak2/ActiveDevelopment/grant-monorepo/contract/contracts/CrowdFund.sol", "file": "./CrowdFund.sol", - "id": 1079, + "id": 1083, "nodeType": "ImportDirective", - "scope": 1135, - "sourceUnit": 1077, + "scope": 1139, + "sourceUnit": 1081, "src": "25:25:1", "symbolAliases": [], "unitAlias": "" @@ -838,24 +838,24 @@ { "baseContracts": [], "contractDependencies": [ - 1076 + 1080 ], "contractKind": "contract", "documentation": null, "fullyImplemented": true, - "id": 1134, + "id": 1138, "linearizedBaseContracts": [ - 1134 + 1138 ], "name": "CrowdFundFactory", "nodeType": "ContractDefinition", "nodes": [ { "constant": false, - "id": 1082, + "id": 1086, "name": "crowdfunds", "nodeType": "VariableDeclaration", - "scope": 1134, + "scope": 1138, "src": "84:20:1", "stateVariable": true, "storageLocation": "default", @@ -865,7 +865,7 @@ }, "typeName": { "baseType": { - "id": 1080, + "id": 1084, "name": "address", "nodeType": "ElementaryTypeName", "src": "84:7:1", @@ -874,7 +874,7 @@ "typeString": "address" } }, - "id": 1081, + "id": 1085, "length": null, "nodeType": "ArrayTypeName", "src": "84:9:1", @@ -889,20 +889,20 @@ { "anonymous": false, "documentation": null, - "id": 1086, + "id": 1090, "name": "ContractCreated", "nodeType": "EventDefinition", "parameters": { - "id": 1085, + "id": 1089, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1084, + "id": 1088, "indexed": false, "name": "newAddress", "nodeType": "VariableDeclaration", - "scope": 1086, + "scope": 1090, "src": "133:18:1", "stateVariable": false, "storageLocation": "default", @@ -911,7 +911,7 @@ "typeString": "address" }, "typeName": { - "id": 1083, + "id": 1087, "name": "address", "nodeType": "ElementaryTypeName", "src": "133:7:1", @@ -930,21 +930,21 @@ }, { "body": { - "id": 1132, + "id": 1136, "nodeType": "Block", "src": "471:439:1", "statements": [ { "assignments": [ - 1108 + 1112 ], "declarations": [ { "constant": false, - "id": 1108, + "id": 1112, "name": "newCrowdFundContract", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "481:28:1", "stateVariable": false, "storageLocation": "default", @@ -953,7 +953,7 @@ "typeString": "address" }, "typeName": { - "id": 1107, + "id": 1111, "name": "address", "nodeType": "ElementaryTypeName", "src": "481:7:1", @@ -966,17 +966,17 @@ "visibility": "internal" } ], - "id": 1119, + "id": 1123, "initialValue": { "argumentTypes": null, "arguments": [ { "argumentTypes": null, - "id": 1111, + "id": 1115, "name": "raiseGoalAmount", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1088, + "referencedDeclaration": 1092, "src": "539:15:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -985,11 +985,11 @@ }, { "argumentTypes": null, - "id": 1112, + "id": 1116, "name": "payOutAddress", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1090, + "referencedDeclaration": 1094, "src": "568:13:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -998,11 +998,11 @@ }, { "argumentTypes": null, - "id": 1113, + "id": 1117, "name": "trusteesAddresses", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1093, + "referencedDeclaration": 1097, "src": "595:17:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", @@ -1011,11 +1011,11 @@ }, { "argumentTypes": null, - "id": 1114, + "id": 1118, "name": "allMilestones", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1096, + "referencedDeclaration": 1100, "src": "626:13:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", @@ -1024,11 +1024,11 @@ }, { "argumentTypes": null, - "id": 1115, + "id": 1119, "name": "durationInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1098, + "referencedDeclaration": 1102, "src": "653:17:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -1037,11 +1037,11 @@ }, { "argumentTypes": null, - "id": 1116, + "id": 1120, "name": "milestoneVotingPeriodInSeconds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1100, + "referencedDeclaration": 1104, "src": "684:30:1", "typeDescriptions": { "typeIdentifier": "t_uint256", @@ -1050,11 +1050,11 @@ }, { "argumentTypes": null, - "id": 1117, + "id": 1121, "name": "immediateFirstMilestonePayout", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1102, + "referencedDeclaration": 1106, "src": "728:29:1", "typeDescriptions": { "typeIdentifier": "t_bool", @@ -1093,7 +1093,7 @@ "typeString": "bool" } ], - "id": 1110, + "id": 1114, "isConstant": false, "isLValue": false, "isPure": false, @@ -1101,23 +1101,23 @@ "nodeType": "NewExpression", "src": "512:13:1", "typeDescriptions": { - "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1076_$", + "typeIdentifier": "t_function_creation_nonpayable$_t_uint256_$_t_address_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$_t_contract$_CrowdFund_$1080_$", "typeString": "function (uint256,address,address[] memory,uint256[] memory,uint256,uint256,bool) returns (contract CrowdFund)" }, "typeName": { "contractScope": null, - "id": 1109, + "id": 1113, "name": "CrowdFund", "nodeType": "UserDefinedTypeName", - "referencedDeclaration": 1076, + "referencedDeclaration": 1080, "src": "516:9:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } } }, - "id": 1118, + "id": 1122, "isConstant": false, "isLValue": false, "isPure": false, @@ -1127,7 +1127,7 @@ "nodeType": "FunctionCall", "src": "512:255:1", "typeDescriptions": { - "typeIdentifier": "t_contract$_CrowdFund_$1076", + "typeIdentifier": "t_contract$_CrowdFund_$1080", "typeString": "contract CrowdFund" } }, @@ -1140,11 +1140,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1121, + "id": 1125, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1108, + "referencedDeclaration": 1112, "src": "798:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1159,18 +1159,18 @@ "typeString": "address" } ], - "id": 1120, + "id": 1124, "name": "ContractCreated", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1086, + "referencedDeclaration": 1090, "src": "782:15:1", "typeDescriptions": { "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", "typeString": "function (address)" } }, - "id": 1122, + "id": 1126, "isConstant": false, "isLValue": false, "isPure": false, @@ -1184,7 +1184,7 @@ "typeString": "tuple()" } }, - "id": 1123, + "id": 1127, "nodeType": "EmitStatement", "src": "777:42:1" }, @@ -1194,11 +1194,11 @@ "arguments": [ { "argumentTypes": null, - "id": 1127, + "id": 1131, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1108, + "referencedDeclaration": 1112, "src": "845:20:1", "typeDescriptions": { "typeIdentifier": "t_address", @@ -1215,18 +1215,18 @@ ], "expression": { "argumentTypes": null, - "id": 1124, + "id": 1128, "name": "crowdfunds", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1082, + "referencedDeclaration": 1086, "src": "829:10:1", "typeDescriptions": { "typeIdentifier": "t_array$_t_address_$dyn_storage", "typeString": "address[] storage ref" } }, - "id": 1126, + "id": 1130, "isConstant": false, "isLValue": false, "isPure": false, @@ -1240,7 +1240,7 @@ "typeString": "function (address) returns (uint256)" } }, - "id": 1128, + "id": 1132, "isConstant": false, "isLValue": false, "isPure": false, @@ -1254,33 +1254,33 @@ "typeString": "uint256" } }, - "id": 1129, + "id": 1133, "nodeType": "ExpressionStatement", "src": "829:37:1" }, { "expression": { "argumentTypes": null, - "id": 1130, + "id": 1134, "name": "newCrowdFundContract", "nodeType": "Identifier", "overloadedDeclarations": [], - "referencedDeclaration": 1108, + "referencedDeclaration": 1112, "src": "883:20:1", "typeDescriptions": { "typeIdentifier": "t_address", "typeString": "address" } }, - "functionReturnParameters": 1106, - "id": 1131, + "functionReturnParameters": 1110, + "id": 1135, "nodeType": "Return", "src": "876:27:1" } ] }, "documentation": null, - "id": 1133, + "id": 1137, "implemented": true, "isConstructor": false, "isDeclaredConst": false, @@ -1288,15 +1288,15 @@ "name": "createCrowdFund", "nodeType": "FunctionDefinition", "parameters": { - "id": 1103, + "id": 1107, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1088, + "id": 1092, "name": "raiseGoalAmount", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "194:20:1", "stateVariable": false, "storageLocation": "default", @@ -1305,7 +1305,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1087, + "id": 1091, "name": "uint", "nodeType": "ElementaryTypeName", "src": "194:4:1", @@ -1319,10 +1319,10 @@ }, { "constant": false, - "id": 1090, + "id": 1094, "name": "payOutAddress", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "225:21:1", "stateVariable": false, "storageLocation": "default", @@ -1331,7 +1331,7 @@ "typeString": "address" }, "typeName": { - "id": 1089, + "id": 1093, "name": "address", "nodeType": "ElementaryTypeName", "src": "225:7:1", @@ -1345,10 +1345,10 @@ }, { "constant": false, - "id": 1093, + "id": 1097, "name": "trusteesAddresses", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "257:27:1", "stateVariable": false, "storageLocation": "default", @@ -1358,7 +1358,7 @@ }, "typeName": { "baseType": { - "id": 1091, + "id": 1095, "name": "address", "nodeType": "ElementaryTypeName", "src": "257:7:1", @@ -1367,7 +1367,7 @@ "typeString": "address" } }, - "id": 1092, + "id": 1096, "length": null, "nodeType": "ArrayTypeName", "src": "257:9:1", @@ -1381,10 +1381,10 @@ }, { "constant": false, - "id": 1096, + "id": 1100, "name": "allMilestones", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "295:20:1", "stateVariable": false, "storageLocation": "default", @@ -1394,7 +1394,7 @@ }, "typeName": { "baseType": { - "id": 1094, + "id": 1098, "name": "uint", "nodeType": "ElementaryTypeName", "src": "295:4:1", @@ -1403,7 +1403,7 @@ "typeString": "uint256" } }, - "id": 1095, + "id": 1099, "length": null, "nodeType": "ArrayTypeName", "src": "295:6:1", @@ -1417,10 +1417,10 @@ }, { "constant": false, - "id": 1098, + "id": 1102, "name": "durationInSeconds", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "325:22:1", "stateVariable": false, "storageLocation": "default", @@ -1429,7 +1429,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1097, + "id": 1101, "name": "uint", "nodeType": "ElementaryTypeName", "src": "325:4:1", @@ -1443,10 +1443,10 @@ }, { "constant": false, - "id": 1100, + "id": 1104, "name": "milestoneVotingPeriodInSeconds", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "357:35:1", "stateVariable": false, "storageLocation": "default", @@ -1455,7 +1455,7 @@ "typeString": "uint256" }, "typeName": { - "id": 1099, + "id": 1103, "name": "uint", "nodeType": "ElementaryTypeName", "src": "357:4:1", @@ -1469,10 +1469,10 @@ }, { "constant": false, - "id": 1102, + "id": 1106, "name": "immediateFirstMilestonePayout", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "402:34:1", "stateVariable": false, "storageLocation": "default", @@ -1481,7 +1481,7 @@ "typeString": "bool" }, "typeName": { - "id": 1101, + "id": 1105, "name": "bool", "nodeType": "ElementaryTypeName", "src": "402:4:1", @@ -1498,15 +1498,15 @@ }, "payable": false, "returnParameters": { - "id": 1106, + "id": 1110, "nodeType": "ParameterList", "parameters": [ { "constant": false, - "id": 1105, + "id": 1109, "name": "", "nodeType": "VariableDeclaration", - "scope": 1133, + "scope": 1137, "src": "462:7:1", "stateVariable": false, "storageLocation": "default", @@ -1515,7 +1515,7 @@ "typeString": "address" }, "typeName": { - "id": 1104, + "id": 1108, "name": "address", "nodeType": "ElementaryTypeName", "src": "462:7:1", @@ -1530,14 +1530,14 @@ ], "src": "461:9:1" }, - "scope": 1134, + "scope": 1138, "src": "159:751:1", "stateMutability": "nonpayable", "superFunction": null, "visibility": "public" } ], - "scope": 1135, + "scope": 1139, "src": "52:860:1" } ], @@ -1548,31 +1548,19 @@ "version": "0.4.24+commit.e67f0147.Emscripten.clang" }, "networks": { - "1541435837030": { + "3": { "events": {}, "links": {}, - "address": "0x893717db73a6f9785772080b3a0bc9cd24b27ea2", - "transactionHash": "0xe7b84dc8a577ba38bebf38cc2928ed550ab00de70b5000c334d6d1137b223ad1" + "address": "0x2bfade54e1afc13d50bcb14b8134aafc0be59558", + "transactionHash": "0xf9aa2d035873d9ae6f3bf1d3a254ca774c22b2cd37c3d92ee41218fe3677e5f2" }, - "1541447574419": { + "1537836920395": { "events": {}, "links": {}, - "address": "0x0f919d15940c0a6c11ee6f4c88ae5d03d91246bf", - "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" - }, - "1542400539532": { - "events": {}, - "links": {}, - "address": "0x23de420265da56889af074254dd900bc888efbf6", - "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" - }, - "1542657525387": { - "events": {}, - "links": {}, - "address": "0x355f1ceac11b3b41641657c24258f74cdd7a1f4b", - "transactionHash": "0xa0259d1a6924f52fb52017ad410a860083749e4d444a29f02ed70309b831a123" + "address": "0xf313d4b4f8c2467d6552c51392076ba90aa233b3", + "transactionHash": "0x6158097c6dcb93aeaad4b21ea540bf2a97d52050c04d36e54558df1aff60bbb8" } }, "schemaVersion": "2.0.1", - "updatedAt": "2018-11-19T19:59:35.976Z" + "updatedAt": "2018-09-26T04:00:55.909Z" } \ No newline at end of file From 9c69f28179181c490b93ae8dcd15623e52bec2a3 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Mon, 26 Nov 2018 20:20:23 -0500 Subject: [PATCH 30/32] Fix test mocks. --- backend/tests/proposal/test_api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/tests/proposal/test_api.py b/backend/tests/proposal/test_api.py index b46c3b9c..1d74d24e 100644 --- a/backend/tests/proposal/test_api.py +++ b/backend/tests/proposal/test_api.py @@ -34,7 +34,7 @@ class TestAPI(BaseUserConfig): self.assertTrue(comment_res.json) - @patch('grant.proposal.views.validate_contribution_tx', return_value=True) + @patch('grant.web3.proposal.validate_contribution_tx', return_value=True) def test_create_proposal_contribution(self, mock_validate_contribution_tx): proposal_res = self.app.post( "/api/v1/proposals/drafts", @@ -67,7 +67,7 @@ class TestAPI(BaseUserConfig): eq("amount") self.assertEqual(proposal_id, res["proposalId"]) - @patch('grant.proposal.views.validate_contribution_tx', return_value=True) + @patch('grant.web3.proposal.validate_contribution_tx', return_value=True) def test_get_proposal_contribution(self, mock_validate_contribution_tx): proposal_res = self.app.post( "/api/v1/proposals/drafts", @@ -104,7 +104,7 @@ class TestAPI(BaseUserConfig): eq("amount") self.assertEqual(proposal_id, res["proposalId"]) - @patch('grant.proposal.views.validate_contribution_tx', return_value=True) + @patch('grant.web3.proposal.validate_contribution_tx', return_value=True) def test_get_proposal_contributions(self, mock_validate_contribution_tx): proposal_res = self.app.post( "/api/v1/proposals/drafts", From 5754a84f79bf0fc2563d82c5e2cb3100bd29148d Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Tue, 27 Nov 2018 12:22:54 -0500 Subject: [PATCH 31/32] Fix wrong test key. --- backend/tests/user/test_user_api.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/tests/user/test_user_api.py b/backend/tests/user/test_user_api.py index e9006cca..26425712 100644 --- a/backend/tests/user/test_user_api.py +++ b/backend/tests/user/test_user_api.py @@ -46,7 +46,7 @@ class TestAPI(BaseUserConfig): self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url) self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB') self.assertEqual(users_json["socialMedias"][0]["username"], 'groot') - self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link) + self.assertEqual(users_json["socialMedias"][0]["url"], self.user.social_medias[0].social_media_link) self.assertEqual(users_json["displayName"], self.user.display_name) def test_get_single_user_by_account_address(self): @@ -58,7 +58,7 @@ class TestAPI(BaseUserConfig): self.assertEqual(users_json["avatar"]["imageUrl"], self.user.avatar.image_url) self.assertEqual(users_json["socialMedias"][0]["service"], 'GITHUB') self.assertEqual(users_json["socialMedias"][0]["username"], 'groot') - self.assertEqual(users_json["socialMedias"][0]["link"], self.user.social_medias[0].social_media_link) + self.assertEqual(users_json["socialMedias"][0]["url"], self.user.social_medias[0].social_media_link) self.assertEqual(users_json["displayName"], self.user.display_name) def test_create_user_duplicate_400(self): From bc076c8736e886d6bf844670e8de1a0c1baf86b5 Mon Sep 17 00:00:00 2001 From: Will O'Beirne Date: Tue, 27 Nov 2018 12:39:36 -0500 Subject: [PATCH 32/32] Remove prints. --- backend/grant/proposal/views.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/backend/grant/proposal/views.py b/backend/grant/proposal/views.py index 87b175c4..b8176f5f 100644 --- a/backend/grant/proposal/views.py +++ b/backend/grant/proposal/views.py @@ -265,12 +265,6 @@ def post_proposal_team_invite(proposal_id, address): if user: email = user.email_address if is_email(email): - print('team_invite_args') - print({ - 'user': user, - 'inviter': g.current_user, - 'proposal': g.current_proposal - }) send_email(email, 'team_invite', { 'user': user, 'inviter': g.current_user,