# (pair signed_weather_data actual_level)
parameter (pair signature nat);
# (pair (under_key over_key) (pair weather_service_key (pair rain_level days_in_future)))
storage (pair (pair (contract unit unit) (contract unit unit)) (pair nat key));
return unit;
code {DUP; DUP;
      CAR; DUP; DIP{CDR; H}; CAR; PAIR;
      SWAP; CDDDR; CHECK_SIGNATURE; # Check if the data has been correctly signed
      IF {} {FAIL} # If signature is not correct, end the execution
      DUP; DUP; DUP; DIIIP{CDR}; # Place storage type on bottom of stack
      DIIP{CDAR};                # Place contracts below numbers
      DIP{CADR};                # Get actual rain
      CDDAR;                     # Get rain threshold
      CMPLT; IF {CAR} {CDR};     # Select contract to receive tokens
      BALANCE; UNIT; TRANSFER_TOKENS; # Setup and execute transfer
      PAIR};                          # Save storage