user: What is the c source code of the assembly code below?

```asm
<usage>:
  endbr64
  sub    $0x8,%rsp
  mov    %rdi,%rsi
  lea    D166(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D118(%rip),%rdi
  call   <puts@plt>
  lea    D111(%rip),%rdi
  call   <puts@plt>
  lea    D10(%rip),%rdi
  call   <puts@plt>
  lea    D176(%rip),%rdi
  call   <puts@plt>
  lea    D14(%rip),%rdi
  call   <puts@plt>
  lea    D112(%rip),%rdi
  call   <puts@plt>
  lea    D103(%rip),%rdi
  call   <puts@plt>
  lea    D2(%rip),%rdi
  call   <puts@plt>
  lea    D123(%rip),%rdi
  call   <puts@plt>
  lea    D159(%rip),%rdi
  call   <puts@plt>
  lea    D126(%rip),%rdi
  call   <puts@plt>
  lea    D19(%rip),%rdi
  call   <puts@plt>
  lea    D201(%rip),%rdi
  call   <puts@plt>
  lea    D104(%rip),%rdi
  call   <puts@plt>
  lea    D228(%rip),%rdi
  call   <puts@plt>
  lea    D17(%rip),%rdi
  call   <puts@plt>
  lea    D237(%rip),%rdi
  call   <puts@plt>
  lea    D158(%rip),%rdi
  call   <puts@plt>
  lea    D190(%rip),%rdi
  call   <puts@plt>
  lea    D45(%rip),%rdi
  call   <puts@plt>
  lea    D214(%rip),%rdi
  call   <puts@plt>
  lea    D139(%rip),%rdi
  call   <puts@plt>
  lea    D7(%rip),%rdi
  call   <puts@plt>
  lea    D81(%rip),%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  add    $0x8,%rsp
  jmp    1070 <putchar@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D166
type: string
name: extract_symbolic_data
arguments: label: D118
type: string
name: extract_symbolic_data
arguments: label: D111
type: string
name: extract_symbolic_data
arguments: label: D10
type: string
name: extract_symbolic_data
arguments: label: D176
type: string
name: extract_symbolic_data
arguments: label: D14
type: string
name: extract_symbolic_data
arguments: label: D112
type: string
name: extract_symbolic_data
arguments: label: D103
type: string
name: extract_symbolic_data
arguments: label: D2
type: string
name: extract_symbolic_data
arguments: label: D123
type: string
name: extract_symbolic_data
arguments: label: D159
type: string
name: extract_symbolic_data
arguments: label: D126
type: string
name: extract_symbolic_data
arguments: label: D19
type: string
name: extract_symbolic_data
arguments: label: D201
type: string
name: extract_symbolic_data
arguments: label: D104
type: string
name: extract_symbolic_data
arguments: label: D228
type: string
name: extract_symbolic_data
arguments: label: D17
type: string
name: extract_symbolic_data
arguments: label: D237
type: string
name: extract_symbolic_data
arguments: label: D158
type: string
name: extract_symbolic_data
arguments: label: D190
type: string
name: extract_symbolic_data
arguments: label: D45
type: string
name: extract_symbolic_data
arguments: label: D214
type: string
name: extract_symbolic_data
arguments: label: D139
type: string
name: extract_symbolic_data
arguments: label: D7
type: string
name: extract_symbolic_data
arguments: label: D81
type: string

tool: D166: 
Usage: %s [options]


tool: D118: 
Options:
-------------

tool: D111: -P<plugin>, --plugin-info[=..] 	  Show plugins summary or detailed plugin information if <plugin> is provided

tool: D10: -p <plugin>, --plugin          	  Use plugin (default plugin is 'md5')

tool: D176: -S<session>, --session-info[=..]  Display sessions summary/detailed info on <session>

tool: D14: -s <session>, --session        	  Load <session> (you may list sessions using -S)

tool: D112: -f <hashfile>, --hashfile     	  Load hashes from file 'hashfile'

tool: D103: -b<ruleset>, --brute[=...]    	  Enables bruteforce mode, load ruleset  'ruleset' (default: '1:8:lalphanum')

tool: D2: -o <filename>, --outfile     	  Write cracked hashes to <filename> upon completion

tool: D123: -O <filename>, --uncrackedfile 	  Write uncracked hashes to <filename> upon completion

tool: D159: -M, --markov-info[=...]      	  Show available Markov stats files summary

tool: D126: -m <statfile>, --markov    	  Enable Markov attack, use <statfile>

tool: D19: -n <threshold>,--markov-threshold Set Markov attack threshold

tool: D201: -N <limit>, --markov-limit 	  Set Markov attack password length limit (<=10, default 8)

tool: D104: -c, --cpu 			  Use CPU even if GPU acceleration is enabled

tool: D228: -F, --fast-markov 		  Faster markov attack (when using GPU)

tool: D17: -G, --gpu-threads 		  Number of GPU threads (up to 4). Increases load/memory utilization, but may improve speeds.

tool: D237: -C, --cpu-threads 		  Number of CPU worker threads.

tool: D158: -D, --gpu-double 		  GPU 2x mode. Better speeds, but less scallable. 

tool: D190: -T, --gpu-temp 			  GPU temperature threshold (default:90 deg celsius). 

tool: D45: -t, --gpu-platform 		  OpenCL platform (default:0). 

tool: D214: -i, --interactive-mode 		  Interactive mode (reduce flicker and tearing). 

tool: D139: -a, --add-opts 			  Additional options (for rule-based attacks). 

tool: D7: 
Ruleset format: 'start_len:end_len:predefined_set:additional_args'


tool: D81: start_len:  	  generated plaintexts are equal in length or longer than that value
end_len:  	  generated plaintexts are equal in length or shorter than that value
predefined_set:   one of 'alpha', 'ualpha', 'lalpha', 'lalphanum', 'ualphanum', 'alphanum', 'ascii', 'none'
additional_args:  additional characters, e.g '+()'

Example:

 -t hello -b1:2:lalpha:* - try all permutations of length 1-2, comprised of lower alphabetical chars and '*'

assistant: ```c
void usage(const char *progname) {
  printf("\nUsage: %s [options]\n", progname);
  printf("\nOptions:\n-------------\n");
  printf("-P<plugin>, --plugin-info[=..] \t  Show plugins summary or detailed plugin information if <plugin> is provided\n");
  printf("-p <plugin>, --plugin          \t  Use plugin (default plugin is 'md5')\n");
  printf("-S<session>, --session-info[=..]  Display sessions summary/detailed info on <session>\n");
  printf("-s <session>, --session        \t  Load <session> (you may list sessions using -S)\n");
  printf("-f <hashfile>, --hashfile     \t  Load hashes from file \'hashfile\'\n");
  printf("-b<ruleset>, --brute[=...]    \t  Enables bruteforce mode, load ruleset  \'ruleset\' (default: \'1:8:lalphanum\')\n");
  printf("-o <filename>, --outfile     \t  Write cracked hashes to <filename> upon completion\n");
  printf("-O <filename>, --uncrackedfile \t  Write uncracked hashes to <filename> upon completion\n");
  printf("-M, --markov-info[=...]      \t  Show available Markov stats files summary\n");
  printf("-m <statfile>, --markov    \t  Enable Markov attack, use <statfile>\n");
  printf("-n <threshold>,--markov-threshold Set Markov attack threshold\n");
  printf("-N <limit>, --markov-limit \t  Set Markov attack password length limit (<=10, default 8)\n");
  printf("-c, --cpu \t\t\t  Use CPU even if GPU acceleration is enabled\n");
  printf("-F, --fast-markov \t\t  Faster markov attack (when using GPU)\n");
  printf("-G, --gpu-threads \t\t  Number of GPU threads (up to 4). Increases load/memory utilization, but may improve speeds.\n");
  printf("-C, --cpu-threads \t\t  Number of CPU worker threads.\n");
  printf("-D, --gpu-double \t\t  GPU 2x mode. Better speeds, but less scallable. \n");
  printf("-T, --gpu-temp \t\t\t  GPU temperature threshold (default:90 deg celsius). \n");
  printf("-t, --gpu-platform \t\t  OpenCL platform (default:0). \n");
  printf("-i, --interactive-mode \t\t  Interactive mode (reduce flicker and tearing). \n");
  printf("-a, --add-opts \t\t\t  Additional options (for rule-based attacks). \n");
  printf("\nRuleset format: \'start_len:end_len:predefined_set:additional_args\'\n\n");
  printf("start_len:  \t  generated plaintexts are equal in length or longer than that value\n"
         "end_len:  \t  generated plaintexts are equal in length or shorter than that value\n"
         "predefined_set:   one of \'alpha\', \'ualpha\', \'lalpha\', \'lalphanum\', \'ualphanum\', \'alphanum\', \'ascii\', \'none\'\n"
         "additional_args:  additional characters, e.g \'+()\'\n\n"
         "Example:\n\n -t hello -b1:2:lalpha:* - try all permutations of length 1-2, comprised of lower alphabetical chars and \'*\'\n");
  printf("\n");
}
```