CJam, 184 120 109 101 76 74 69 67 64 62 58 bytes
0'-57*" #"56f*'|f+7*2>" * "50*22/W<Sf+..e&~J$]N'|+a37*.+
Try it online in the " * "50*22/WCJam interpreter.
Idea
The most interesting part of the flag is the stars and stripes pattern.
If we repeat two spaces and a number sign 56 times and append a vertical bar to each, we get
| | #########################################################|
Repeating this pattern 7 times and discarding the first two lines, we obtain the stripes:
#########################################################| | | #########################################################| | | #########################################################| | | #########################################################| | | #########################################################| | | #########################################################| | | #########################################################|
Now, if we repeat the string " * " 50 times and split the result into chunks of length 22, we obtain the stars:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
The whitespace is a little off, but we can fix that by eliminating the last chunk and appending a space to the remaining ones.
Now, if we superimpose stripes and stars, we get
* * * * * * #################################| * * * * * | * * * * * * | * * * * * #################################| * * * * * * | * * * * * | * * * * * * #################################| * * * * * | * * * * * * | ########################################################| | | ########################################################| | | ########################################################| | | ########################################################|
All that's left to do is adding two lines of 57 dashes, adding a column of 37 vertical bars and putting the cherry on top.
Code
0 e# Push a zero. '-57* e# Push a string of 57 dashes. " #"56f* e# Repeat each character in the string 56 times. '|f+ e# Append a vertical bar to each resulting string. 7* e# Repeat the resulting array of strings 7 times. 2> e# Discard the first two strings. " * "50* e# Repeat the string 50 times. 22/ e# Split the result into chunks of length 22. W< e# Discard the last, partial chunk. Sf* e# Append a space to each chunk. ..e& e# Twofold vectorized logical AND. e# Since all characters in the strings are truthy, this always selects e# the second character, painting the stars over the stripes. ~ e# Dump all resulting strings on the stack. J$ e# Copy the string of dashes. ] e# Wrap the entire stack in an array. N'|+a37* e# Repeat ["\n|"] 37 times. .+ e# Perform vectorized concatenation.